From 0fe2e762afdabfafdb70bc00f36d62a393542f4d Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 12 Aug 2026 16:18:16 -0700 Subject: [PATCH 01/48] add fuel switching calculation --- app.py | 4 +- src/config.py | 6 ++ src/energy.py | 200 ++++++++++++++++++++++++++++++++++--------------- utils/units.py | 2 + 4 files changed, 151 insertions(+), 61 deletions(-) diff --git a/app.py b/app.py index 9bbbd9b..d3a8561 100644 --- a/app.py +++ b/app.py @@ -10,8 +10,8 @@ from utils.logging_config import get_logger, setup_logging # Read level from environment variable (or default to INFO) -log_level_name = os.environ.get("LOG_LEVEL", "INFO") -log_level = getattr(logging, log_level_name.upper(), logging.INFO) +log_level_name = os.environ.get("LOG_LEVEL", "DEBUG") +log_level = getattr(logging, log_level_name.upper(), logging.DEBUG) setup_logging(level=log_level) # Get a logger for this module diff --git a/src/config.py b/src/config.py index f7d6bda..6becc65 100644 --- a/src/config.py +++ b/src/config.py @@ -106,11 +106,17 @@ class Columns(StrEnum): AWHP_COP_H = "awhp_cop_h" AWHP_HHW_W = "awhp_hhw_W" ELEC_AWHP_H_WH = "elec_awhp_h_Wh" + HHW_REM_W_NG_MODE = "hhw_rem_W_ng_mode" # --- Boiler --- + BOILER_NUM = "boiler_num" BOILER_EFF = "boiler_eff" BOILER_HHW_W = "boiler_hhw_W" + BOILER_EQ_CALC = "boiler_eq_calc_type" + BOILER_CAP_W = "boiler_cap_W" GAS_BOILER_WH = "gas_boiler_Wh" + BOILER_HHW_W_NG_MODE = "boiler_hhw_W_ng_mode" + GAS_BOILER_WH_NG_MODE = "gas_boiler_Wh_ng_mode" # --- Resistance heater backup --- RES_HHW_W = "res_hhw_W" diff --git a/src/energy.py b/src/energy.py index ebc04c9..5946ef6 100644 --- a/src/energy.py +++ b/src/energy.py @@ -176,8 +176,10 @@ def _equipment_data_validation(library: EquipmentLibrary, scenario_ids: list[str awhp_c = library.get_equipment(scen.awhp) if scen.awhp_sizing_priority is None: - raise ValueError(f"AWHP scenario '{scen.eq_scen_id}' requires 'awhp_sizing_priority'.") - + raise ValueError( + f"AWHP scenario '{scen.eq_scen_id}' requires 'awhp_sizing_priority'." + ) + if not awhp_c.performance_cooling: raise ValueError(f"Equipment '{awhp_c.eq_id}' lacks cooling performance data.") @@ -437,6 +439,7 @@ def _capacity_constraints( return cap + def _awhp_reference_capacity( e: Equipment, performance: PerformanceCurves, @@ -462,10 +465,8 @@ def _awhp_reference_capacity( ref_temp_C = 30.0 # Conservative outdoor temperature for sizing ref_supply_temp = supply_t - ref_capacity_W = e.performance[load_type].leaving_supply_t[ - ref_supply_temp - ].capacity_W - + ref_capacity_W = e.performance[load_type].leaving_supply_t[ref_supply_temp].capacity_W + cap_ref = interp_vector( e.performance[load_type].t_out_C, ref_capacity_W, @@ -534,10 +535,16 @@ def loads_to_site_energy( Col.AWHP_NUM.value, Col.AWHP_NUM_R.value, Col.ELEC_AWHP_H_WH.value, + Col.HHW_REM_W_NG_MODE.value, # for fuel switching # Boiler + Col.BOILER_NUM.value, Col.BOILER_HHW_W.value, Col.BOILER_EFF.value, + Col.BOILER_EQ_CALC.value, + Col.BOILER_CAP_W.value, Col.GAS_BOILER_WH.value, + Col.BOILER_HHW_W_NG_MODE.value, # for fuel switching + Col.GAS_BOILER_WH_NG_MODE.value, # for fuel switching # Resistance heater Col.RES_HHW_W.value, Col.ELEC_RES_WH.value, @@ -711,30 +718,37 @@ def loads_to_site_energy( # Determine reference capacity if sizing_priority == "heating": sizing_load = "hhw_W" - cap_ref = _awhp_reference_capacity(awhp_h, awhp_h_performance, awhp_h_supply_t, "heating") - + cap_ref = _awhp_reference_capacity( + awhp_h, awhp_h_performance, awhp_h_supply_t, "heating" + ) + elif sizing_priority == "cooling": sizing_load = "chw_W" - cap_ref = _awhp_reference_capacity(awhp_c, awhp_c_performance, awhp_c_supply_t, "cooling") - + cap_ref = _awhp_reference_capacity( + awhp_c, awhp_c_performance, awhp_c_supply_t, "cooling" + ) + elif sizing_priority == "larger" and sizing_mode in [ "integer_sizing_peak_load", "fractional_sizing_peak_load", ]: cap_ref = { - "hhw_W": _awhp_reference_capacity(awhp_h, awhp_h_performance, awhp_h_supply_t, "heating"), - "chw_W": _awhp_reference_capacity(awhp_c, awhp_c_performance, awhp_c_supply_t, "cooling") + "hhw_W": _awhp_reference_capacity( + awhp_h, awhp_h_performance, awhp_h_supply_t, "heating" + ), + "chw_W": _awhp_reference_capacity( + awhp_c, awhp_c_performance, awhp_c_supply_t, "cooling" + ), } num = { "hhw_W": float(df["hhw_W"].max()) * sizing_value / cap_ref["hhw_W"], - "chw_W": float(df["chw_W"].max()) * sizing_value / cap_ref["chw_W"] + "chw_W": float(df["chw_W"].max()) * sizing_value / cap_ref["chw_W"], } - sizing_load = max(num, key = num.get) + sizing_load = max(num, key=num.get) cap_ref = cap_ref[sizing_load] logger.debug(f"{sizing_load} drives AWHP sizing.") - # Determine number of units if sizing_mode in [ "integer_sizing_peak_load", @@ -769,6 +783,11 @@ def loads_to_site_energy( served_h_W = np.minimum(df[Col.HHW_REM_W.value].to_numpy(), cap_total_h_W) elec_h_Wh = served_h_W / awhp_cop_h + fuel_switching = True + if fuel_switching: + df[Col.HHW_REM_W_NG_MODE.value] = df[Col.HHW_REM_W.value].to_numpy() + # store remaining HHW load before it gets updated (in case there is heat recovery preceding) + # add refrigerant information awhp_refrigerant = awhp_h.refrigerant if awhp_h.refrigerant else "Unknown" num_hours = len(df) # Use actual data length (handles leap years) @@ -823,24 +842,20 @@ def loads_to_site_energy( boiler_served_W = df[Col.HHW_REM_W].to_numpy() gas_Wh = boiler_served_W / eff - boiler_peak_served_W = np.nanmax(boiler_served_W) - # sizing logic - if backup_heating.eq_calc_type == "generic": - # generic equipment - do not account for space, electric capacity, etc. - boiler_num = 0 - else: - # specific equipment model - boiler_cap = backup_heating.capacity_W - boiler_num = np.ceil(boiler_peak_served_W / boiler_cap) - boiler_num = max(boiler_num, 1) # ensure at least one unit - - logger.debug(f"Gas boiler sizing: {boiler_num:.0f} units") + if fuel_switching: + # create intermediate columns to store boiler HHW and gas usage if AWHP did not operate (i.e., NG mode) + df[Col.BOILER_HHW_W_NG_MODE.value] = df[Col.HHW_REM_W_NG_MODE.value] + gas_Wh_NG_mode = df[Col.HHW_REM_W_NG_MODE.value] / eff + df[Col.GAS_BOILER_WH_NG_MODE.value] = gas_Wh_NG_mode df[Col.BOILER_HHW_W.value] = boiler_served_W df[Col.GAS_BOILER_WH.value] = gas_Wh df[Col.BOILER_EFF.value] = eff df[Col.GAS_WH.value] += gas_Wh - df[Col.HHW_REM_W.value] = 0.0 + df[Col.HHW_REM_W.value] -= boiler_served_W + # boiler sizing information + df[Col.BOILER_EQ_CALC.value] = backup_heating.eq_calc_type + df[Col.BOILER_CAP_W.value] = backup_heating.capacity_W boiler_coverage = ( (np.nansum(boiler_served_W) / np.nansum(df[Col.HHW_W.value])) * 100 @@ -901,17 +916,17 @@ def loads_to_site_energy( awhp_turndown = 0.5 num_compressors = awhp_num / awhp_turndown # calculate number of "compressors" used to serve heating load - num_compressors_h = np.maximum(0, - np.ceil( - num_compressors - * df[Col.AWHP_HHW_W.value] - / df[Col.AWHP_CAP_H_W.value] - ) - ) - num_compressors_h[np.isnan(num_compressors_h)] = 0 # for hours where AWHP heating capacity is 0 + num_compressors_h = np.maximum( + 0, np.ceil(num_compressors * df[Col.AWHP_HHW_W.value] / df[Col.AWHP_CAP_H_W.value]) + ) + num_compressors_h[np.isnan(num_compressors_h)] = ( + 0 # for hours where AWHP heating capacity is 0 + ) # remaining compressors can serve cooling load num_compressors_c = np.maximum(0, num_compressors - num_compressors_h) - awhp_num_c = num_compressors_c * awhp_turndown # number of compressors available to operate in cooling + awhp_num_c = ( + num_compressors_c * awhp_turndown + ) # number of compressors available to operate in cooling cap_total_c_W = awhp_cap_c * awhp_num_c served_c_W = np.minimum(df[Col.CHW_REM_W.value].to_numpy(), cap_total_c_W) @@ -1066,9 +1081,14 @@ def _finalize_columns(df: pd.DataFrame, detail: bool) -> list[str]: Col.AWHP_REFRIGERANT.value, Col.AWHP_REFRIGERANT_WEIGHT_KG.value, Col.AWHP_REFRIGERANT_GWP.value, + Col.BOILER_NUM.value, Col.BOILER_EFF.value, Col.BOILER_HHW_W.value, + Col.BOILER_HHW_W_NG_MODE.value, + Col.BOILER_EQ_CALC.value, + Col.BOILER_CAP_W.value, Col.GAS_BOILER_WH.value, + Col.GAS_BOILER_WH_NG_MODE.value, Col.RES_HHW_W.value, Col.ELEC_RES_WH.value, Col.AWHP_NUM_C.value, @@ -1183,20 +1203,82 @@ def site_to_source( # used with non-leap emission scenario years. Emissions are still correct # because they're matched by month+hour pattern. + ## fuel switching logic + fuel_switching = True + if fuel_switching: + emissions_intensity_HP = ( + merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH.value] / merged[Col.AWHP_COP_H.value] + ) + emissions_intensity_NG = gas_emissions_rate / merged[Col.BOILER_EFF.value] + NG_mode = ( + emissions_intensity_HP > emissions_intensity_NG + ) # disable HP if electricity emissions intensity is higher + + # update AWHP and electricity total + merged.loc[NG_mode, Col.ELEC_WH.value] -= merged[Col.ELEC_AWHP_H_WH.value][NG_mode] + merged.loc[NG_mode, Col.ELEC_AWHP_H_WH.value] = 0.0 + merged.loc[NG_mode, Col.AWHP_HHW_W.value] = 0.0 + + # update boiler and gas total + merged.loc[NG_mode, Col.GAS_WH.value] += ( + merged[Col.GAS_BOILER_WH_NG_MODE.value][NG_mode] + - merged[Col.GAS_BOILER_WH.value][NG_mode] + ) + # boilers are the only gas consuming equipment, but this logic included for consistency + merged.loc[NG_mode, Col.BOILER_HHW_W.value] = merged[Col.BOILER_HHW_W_NG_MODE.value][ + NG_mode + ] + merged.loc[NG_mode, Col.GAS_BOILER_WH.value] = merged[Col.GAS_BOILER_WH_NG_MODE.value][ + NG_mode + ] + + ## boiler sizing, after gas has been updated + # determine peak boiler load for each equipment scenario + df_peak_hhw = ( + merged[[Col.EQ_SCEN_ID.value, Col.BOILER_HHW_W.value]] + .groupby([Col.EQ_SCEN_ID.value]) + .max() + .reset_index() + ) + df_peak_hhw = df_peak_hhw.rename(columns={"boiler_hhw_W": "boiler_peak_hhw_W"}) + final_df = merged.merge(df_peak_hhw, on=[Col.EQ_SCEN_ID.value], how="left") + + specific_scen = final_df[Col.BOILER_EQ_CALC.value] == "specific" + final_df.loc[~specific_scen, Col.BOILER_NUM.value] = ( + 0.0 # 0 for generic equipment - do not account for space, electricaL capacity, etc. + ) + final_df.loc[specific_scen, Col.BOILER_NUM.value] = np.maximum( + 1, + np.ceil( + final_df["boiler_peak_hhw_W"][specific_scen] + / final_df[Col.BOILER_CAP_W.value][specific_scen] + ), + ) + final_df = final_df.drop( + [ + Col.BOILER_HHW_W_NG_MODE.value, + Col.GAS_BOILER_WH_NG_MODE.value, + Col.BOILER_EQ_CALC.value, + "boiler_peak_hhw_W", + ], + axis=1, + ) + + ## emissions calculations # electricity emissions - merged[Col.ELEC_EMISSIONS_KG_CO2E.value] = ( - merged[Col.ELEC_WH.value] - * merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH.value] + final_df[Col.ELEC_EMISSIONS_KG_CO2E.value] = ( + final_df[Col.ELEC_WH.value] + * final_df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH.value] / 1_000_000 #! make cleaner ) # gas emissions - if Col.GAS_WH.value in merged.columns: - merged[Col.GAS_EMISSIONS_KG_CO2E.value] = ( - gas_emissions_rate * merged[Col.GAS_WH.value] / 1_000_000 + if Col.GAS_WH.value in final_df.columns: + final_df[Col.GAS_EMISSIONS_KG_CO2E.value] = ( + gas_emissions_rate * final_df[Col.GAS_WH.value] / 1_000_000 ) else: - merged[Col.GAS_EMISSIONS_KG_CO2E.value] = 0.0 + final_df[Col.GAS_EMISSIONS_KG_CO2E.value] = 0.0 # refrigerant emissions refrig_cols = [ @@ -1205,17 +1287,17 @@ def site_to_source( Col.CHILLER_REFRIGERANT_GWP.value, ] - existing_refrig_cols = [c for c in refrig_cols if c in merged.columns] + existing_refrig_cols = [c for c in refrig_cols if c in final_df.columns] if existing_refrig_cols: # Compute the total refrigerant emissions inventory by summing available columns - merged[Col.TOTAL_REFRIG_GWP_KG.value] = merged[existing_refrig_cols].sum(axis=1) + final_df[Col.TOTAL_REFRIG_GWP_KG.value] = final_df[existing_refrig_cols].sum(axis=1) else: # If none exist, default to zero - merged[Col.TOTAL_REFRIG_GWP_KG.value] = 0.0 + final_df[Col.TOTAL_REFRIG_GWP_KG.value] = 0.0 - merged[Col.TOTAL_REFRIG_EMISSIONS_KG_CO2E.value] = ( - merged[Col.TOTAL_REFRIG_GWP_KG.value] * annual_refrig_leakage_percent + final_df[Col.TOTAL_REFRIG_EMISSIONS_KG_CO2E.value] = ( + final_df[Col.TOTAL_REFRIG_GWP_KG.value] * annual_refrig_leakage_percent ) # DEBUGGING CODE TO IDENTIFY BAD TIMESTAMPS @@ -1230,25 +1312,25 @@ def site_to_source( # print(bad_rows[["year", "month", "day", "hour"]].head()) - merged[Col.TIMESTAMP.value] = pd.to_datetime( - merged[[Col.YEAR.value, Col.MONTH.value, Col.DAY.value, Col.HOUR.value]] + final_df[Col.TIMESTAMP.value] = pd.to_datetime( + final_df[[Col.YEAR.value, Col.MONTH.value, Col.DAY.value, Col.HOUR.value]] ) - merged = merged.drop( + final_df = final_df.drop( columns=[Col.MONTH.value, Col.DAY.value, Col.DOY.value, Col.HOUR.value] ).set_index(Col.TIMESTAMP.value) - merged[Col.TOTAL_EMISSIONS_KG_CO2E.value] = ( - merged[Col.ELEC_EMISSIONS_KG_CO2E.value] - + merged[Col.GAS_EMISSIONS_KG_CO2E.value] - + merged[Col.TOTAL_REFRIG_EMISSIONS_KG_CO2E.value] + final_df[Col.TOTAL_EMISSIONS_KG_CO2E.value] = ( + final_df[Col.ELEC_EMISSIONS_KG_CO2E.value] + + final_df[Col.GAS_EMISSIONS_KG_CO2E.value] + + final_df[Col.TOTAL_REFRIG_EMISSIONS_KG_CO2E.value] ) - merged[Col.EM_SCEN_ID.value] = em_scen_id # tag scenario + final_df[Col.EM_SCEN_ID.value] = em_scen_id # tag scenario - results.append(merged) + results.append(final_df) - total_emissions_kg = sum(r[Col.TOTAL_EMISSIONS_KG_CO2E.value].sum() for r in results) + total_emissions_kg = final_df[Col.TOTAL_EMISSIONS_KG_CO2E.value].sum() logger.info( f"Completed site_to_source for {em_scen_id}, " f"total emissions={total_emissions_kg:.0f} kg CO2e" diff --git a/utils/units.py b/utils/units.py index b30c83e..707945f 100644 --- a/utils/units.py +++ b/utils/units.py @@ -275,6 +275,7 @@ def sqft_to_sqm(sqft): "simult_h_hr_W": ("capacity", "HR Simultaneous Cap"), "awhp_cap_h_W": ("capacity", "AWHP Heating Cap"), "capacity_W": ("capacity", "Rated Capacity"), + "boiler_cap_W": ("capacity", "Boiler Cap"), # === Capacity - Cooling (W) === "awhp_cap_c_W": ("capacity_cooling", "AWHP Cooling Cap"), # === Temperature (°C) === @@ -318,6 +319,7 @@ def sqft_to_sqm(sqft): "awhp_num_c": (None, "AWHP Count (Cooling)"), "awhp_num": (None, "AWHP Count"), "awhp_num_redundant": (None, "AWHP Redundant Count"), + "boiler_num": (None, "Boiler Count"), # === Refrigerant Type (text - no conversion) === "chiller_refrigerant": (None, "Chiller Refrigerant"), "hr_wwhp_refrigerant": (None, "HR-WWHP Refrigerant"), From a21248b8da86929c52f91d8c0e23223fd13a82f8 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 12 Aug 2026 18:02:28 -0700 Subject: [PATCH 02/48] add new input, equip scenario --- data/input/equipment_data.JSON | 38 +++++++++++++++++ layout/input.py | 10 ++++- layout/output.py | 3 +- pages/equipment_page.py | 41 ++++++++++++++++++- src/config.py | 2 + src/energy.py | 75 +++++++++++++++++++++------------- src/equipment.py | 17 +++++--- 7 files changed, 147 insertions(+), 39 deletions(-) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index 52e803d..72ab06c 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -1009,6 +1009,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1026,6 +1027,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1043,6 +1045,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1060,6 +1063,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1077,6 +1081,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1094,6 +1099,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1111,6 +1117,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1128,6 +1135,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1145,6 +1153,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1162,6 +1171,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1179,6 +1189,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1196,6 +1207,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1213,6 +1225,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1230,6 +1243,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1247,6 +1261,25 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_16", + "eq_scen_name": "100% (Frac) AWHP (H+C), Fuel Switching", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": "hp01", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "fractional_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 38, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "bo03", + "fuel_switching": true, "chiller": "ch02" } ], @@ -1270,6 +1303,11 @@ "group_id": "hhw_supply_temps", "group_name": "HHW Supply Temps", "scenario_ids": ["eq_scenario_4", "eq_scenario_13", "eq_scenario_14", "eq_scenario_5", "eq_scenario_15"] + }, + { + "group_id": "fuel_switching", + "group_name": "Dynamic Fuel Switching", + "scenario_ids": ["eq_scenario_9", "eq_scenario_16"] } ] } \ No newline at end of file diff --git a/layout/input.py b/layout/input.py index b2f58b2..78861e9 100644 --- a/layout/input.py +++ b/layout/input.py @@ -542,9 +542,10 @@ def build_equipment_table( ("awhp_sizing_mode", "AWHP Sizing Mode"), ("awhp_sizing_value", "AWHP Sizing Value"), ("awhp_redundancy", "AWHP Redundancy"), - ("awhp_use_cooling", "AWHP Use Cooling"), + ("awhp_use_cooling", "Use AWHP for Cooling"), ("awhp_sizing_priority", "AWHP Sizing Priority"), ("backup_heating", "Backup Heating"), + ("fuel_switching", "Use Optimal Heating Fuel"), ("chiller", "Backup Cooling"), ] @@ -998,7 +999,7 @@ def edit_equipment_modal(): [ dmc.Switch( id="edit-awhp-use-cooling", - label="Use heat pump also for cooling", + label="Use AWHP for cooling", mt="xs", ), dmc.Select( @@ -1050,6 +1051,11 @@ def edit_equipment_modal(): ), ], ), + dmc.Switch( + id="edit-fuel-switching", + label="Use optimal heating fuel", + mt="xs", + ), dmc.Text( id="edit-scenario-error", size="xs", diff --git a/layout/output.py b/layout/output.py index dd80415..d4b17c1 100644 --- a/layout/output.py +++ b/layout/output.py @@ -162,9 +162,10 @@ def get_value(self, path: str): ("awhp_sizing_mode", "AWHP Sizing Mode"), ("awhp_sizing_value", "AWHP Sizing Value"), ("awhp_redundancy", "AWHP Redundancy"), - ("awhp_use_cooling", "AWHP Use Cooling"), + ("awhp_use_cooling", "Use AWHP for Cooling"), ("awhp_sizing_priority", "AWHP Sizing Priority"), ("backup_heating", "Backup Heating"), + ("fuel_switching", "Use Optimal Heating Fuel"), ("chiller", "Chiller"), ] diff --git a/pages/equipment_page.py b/pages/equipment_page.py index 954513c..1b7d25d 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -684,6 +684,7 @@ def reset_equipment(n_clicks, initial_data): Output("edit-awhp-sizing-priority", "value"), Output("edit-backup-heating-select", "data"), Output("edit-backup-heating-select", "value"), + Output("edit-fuel-switching", "checked"), Output("edit-chiller-select", "data"), Output("edit-chiller-select", "value"), Output("edit-scenario-error", "children"), @@ -698,7 +699,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): pre-filling all editable fields. """ if not any(edit_clicks or []): - return (no_update,) * 21 + return (no_update,) * 22 if not equipment_data: return ( @@ -720,6 +721,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): None, [], None, + False, [], None, "No equipment data.", @@ -730,7 +732,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): triggered = callback_context.triggered if not triggered: - return (no_update,) * 21 + return (no_update,) * 22 prop_id = triggered[0]["prop_id"] id_str = prop_id.split(".")[0] @@ -757,6 +759,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): None, [], None, + False, [], None, "Failed to parse button id.", @@ -787,6 +790,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): None, [], None, + False, [], None, f"Scenario {eq_scen_id!r} not found.", @@ -849,6 +853,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): redundancy = scenario.get("awhp_redundancy", 1) use_cooling = scenario.get("awhp_use_cooling", False) sizing_priority = scenario.get("awhp_sizing_priority") or "heating" + fuel_switching = scenario.get("fuel_switching", False) backup_heating_val = scenario.get("backup_heating") chiller_val = scenario.get("chiller") @@ -872,6 +877,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): sizing_priority, backup_heating_options, backup_heating_val, + fuel_switching, chiller_options, chiller_val, "", @@ -897,6 +903,7 @@ def open_edit_modal(edit_clicks, equipment_data, unit_mode): State("edit-awhp-use-cooling", "checked"), State("edit-awhp-sizing-priority", "value"), State("edit-backup-heating-select", "value"), + State("edit-fuel-switching", "checked"), State("edit-chiller-select", "value"), State("equipment-store", "data"), State("unit-toggle", "value"), @@ -918,6 +925,7 @@ def save_edit_scenario( use_cooling, sizing_priority, backup_heating_val, + fuel_switching, chiller_val, equipment_data, unit_mode, @@ -969,6 +977,7 @@ def save_edit_scenario( redundancy = 1 use_cooling = bool(use_cooling) + fuel_switching = bool(fuel_switching) scenarios = equipment_data["equipment_scenarios"] updated = False @@ -990,6 +999,7 @@ def save_edit_scenario( new_scen["awhp_use_cooling"] = use_cooling new_scen["awhp_sizing_priority"] = sizing_priority new_scen["backup_heating"] = backup_heating_val + new_scen["fuel_switching"] = fuel_switching new_scen["chiller"] = chiller_val new_scenarios.append(new_scen) updated = True @@ -1177,8 +1187,35 @@ def update_sizing_priority(use_cooling, sizing_mode): return disabled +@callback( + Output("edit-fuel-switching", "disabled"), + Output("edit-fuel-switching", "checked", allow_duplicate=True), + Input("edit-awhp-select", "value"), + Input("edit-backup-heating-select", "value"), + State("edit-fuel-switching", "checked"), + State("equipment-store", "data"), + prevent_initial_call=True, +) +def update_fuel_switching(awhp_id, backup_heating_id, fuel_switching, equipment_data): + """Enable/disable fuel switching input and update value when AWHP or backup heating selection changes.""" + # get backup heating fuel + equipment_list = equipment_data.get("equipment", []) if equipment_data else [] + backup_heating = next((e for e in equipment_list if e.get("eq_id") == backup_heating_id), None) + backup_heating_fuel = backup_heating.get("fuel", "") + + # Disable input if AWHP is not selected, or if backup heating option is electric + awhp_selected = awhp_id and awhp_id != "None" + disabled = (not awhp_selected) or (backup_heating_fuel != "natural_gas") + + # Set value to unchecked if disabled condition is met, otherwise preserve last value + checked = False if disabled else fuel_switching + + return (disabled, checked) + + # helper to build equipment options for Selects + def _build_equipment_options( equipment_list, eq_type, unit_mode, include_none=False, none_label="None" ): diff --git a/src/config.py b/src/config.py index 6becc65..4c3338b 100644 --- a/src/config.py +++ b/src/config.py @@ -36,6 +36,7 @@ class EquipmentTableRows(Enum): "awhp_use_cooling", "awhp_sizing_priority", "backup_heating", + "fuel_switching", "chiller", ) @@ -117,6 +118,7 @@ class Columns(StrEnum): GAS_BOILER_WH = "gas_boiler_Wh" BOILER_HHW_W_NG_MODE = "boiler_hhw_W_ng_mode" GAS_BOILER_WH_NG_MODE = "gas_boiler_Wh_ng_mode" + FUEL_SWITCHING = "fuel_switching" # --- Resistance heater backup --- RES_HHW_W = "res_hhw_W" diff --git a/src/energy.py b/src/energy.py index 5946ef6..b33e7e5 100644 --- a/src/energy.py +++ b/src/energy.py @@ -535,7 +535,7 @@ def loads_to_site_energy( Col.AWHP_NUM.value, Col.AWHP_NUM_R.value, Col.ELEC_AWHP_H_WH.value, - Col.HHW_REM_W_NG_MODE.value, # for fuel switching + Col.HHW_REM_W_NG_MODE.value, # Boiler Col.BOILER_NUM.value, Col.BOILER_HHW_W.value, @@ -543,8 +543,9 @@ def loads_to_site_energy( Col.BOILER_EQ_CALC.value, Col.BOILER_CAP_W.value, Col.GAS_BOILER_WH.value, - Col.BOILER_HHW_W_NG_MODE.value, # for fuel switching - Col.GAS_BOILER_WH_NG_MODE.value, # for fuel switching + Col.BOILER_HHW_W_NG_MODE.value, + Col.GAS_BOILER_WH_NG_MODE.value, + Col.FUEL_SWITCHING.value, # Resistance heater Col.RES_HHW_W.value, Col.ELEC_RES_WH.value, @@ -783,10 +784,12 @@ def loads_to_site_energy( served_h_W = np.minimum(df[Col.HHW_REM_W.value].to_numpy(), cap_total_h_W) elec_h_Wh = served_h_W / awhp_cop_h - fuel_switching = True - if fuel_switching: + if scen.fuel_switching: + df[Col.FUEL_SWITCHING.value] = True df[Col.HHW_REM_W_NG_MODE.value] = df[Col.HHW_REM_W.value].to_numpy() # store remaining HHW load before it gets updated (in case there is heat recovery preceding) + else: + df[Col.FUEL_SWITCHING.value] = False # add refrigerant information awhp_refrigerant = awhp_h.refrigerant if awhp_h.refrigerant else "Unknown" @@ -842,7 +845,7 @@ def loads_to_site_energy( boiler_served_W = df[Col.HHW_REM_W].to_numpy() gas_Wh = boiler_served_W / eff - if fuel_switching: + if scen.fuel_switching: # create intermediate columns to store boiler HHW and gas usage if AWHP did not operate (i.e., NG mode) df[Col.BOILER_HHW_W_NG_MODE.value] = df[Col.HHW_REM_W_NG_MODE.value] gas_Wh_NG_mode = df[Col.HHW_REM_W_NG_MODE.value] / eff @@ -1089,6 +1092,7 @@ def _finalize_columns(df: pd.DataFrame, detail: bool) -> list[str]: Col.BOILER_CAP_W.value, Col.GAS_BOILER_WH.value, Col.GAS_BOILER_WH_NG_MODE.value, + Col.FUEL_SWITCHING.value, Col.RES_HHW_W.value, Col.ELEC_RES_WH.value, Col.AWHP_NUM_C.value, @@ -1204,33 +1208,45 @@ def site_to_source( # because they're matched by month+hour pattern. ## fuel switching logic - fuel_switching = True - if fuel_switching: - emissions_intensity_HP = ( - merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH.value] / merged[Col.AWHP_COP_H.value] - ) - emissions_intensity_NG = gas_emissions_rate / merged[Col.BOILER_EFF.value] - NG_mode = ( + emissions_intensity_HP = ( + merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH.value] / merged[Col.AWHP_COP_H.value] + ) + emissions_intensity_NG = gas_emissions_rate / merged[Col.BOILER_EFF.value] + NG_mode = ( + merged[Col.FUEL_SWITCHING.value].to_numpy() # only evaluate if fuel switching is true + & ( emissions_intensity_HP > emissions_intensity_NG ) # disable HP if electricity emissions intensity is higher + ) - # update AWHP and electricity total - merged.loc[NG_mode, Col.ELEC_WH.value] -= merged[Col.ELEC_AWHP_H_WH.value][NG_mode] - merged.loc[NG_mode, Col.ELEC_AWHP_H_WH.value] = 0.0 - merged.loc[NG_mode, Col.AWHP_HHW_W.value] = 0.0 + # print number of fuel switching hours + df_fuel_switching = merged + df_fuel_switching["NG_mode"] = NG_mode + df_fuel_switching = ( + df_fuel_switching[[Col.EQ_SCEN_ID.value, Col.EQ_SCEN_NAME.value, "NG_mode"]] + .groupby([Col.EQ_SCEN_ID.value, Col.EQ_SCEN_NAME.value]) + .agg(NG_mode_hours=("NG_mode", "sum"), total_hours=("NG_mode", "size")) + .reset_index() + ) + logger.debug(f"Fuel switching operation:\n {df_fuel_switching}") - # update boiler and gas total - merged.loc[NG_mode, Col.GAS_WH.value] += ( - merged[Col.GAS_BOILER_WH_NG_MODE.value][NG_mode] - - merged[Col.GAS_BOILER_WH.value][NG_mode] - ) - # boilers are the only gas consuming equipment, but this logic included for consistency - merged.loc[NG_mode, Col.BOILER_HHW_W.value] = merged[Col.BOILER_HHW_W_NG_MODE.value][ - NG_mode - ] - merged.loc[NG_mode, Col.GAS_BOILER_WH.value] = merged[Col.GAS_BOILER_WH_NG_MODE.value][ - NG_mode - ] + # update AWHP and electricity total + merged.loc[NG_mode, Col.ELEC_WH.value] -= merged[Col.ELEC_AWHP_H_WH.value][NG_mode] + merged.loc[NG_mode, Col.ELEC_AWHP_H_WH.value] = 0.0 + merged.loc[NG_mode, Col.AWHP_HHW_W.value] = 0.0 + + # update boiler and gas total + merged.loc[NG_mode, Col.GAS_WH.value] += ( + merged[Col.GAS_BOILER_WH_NG_MODE.value][NG_mode] + - merged[Col.GAS_BOILER_WH.value][NG_mode] + ) + # boilers are the only gas consuming equipment, but this logic included for consistency + merged.loc[NG_mode, Col.BOILER_HHW_W.value] = merged[Col.BOILER_HHW_W_NG_MODE.value][ + NG_mode + ] + merged.loc[NG_mode, Col.GAS_BOILER_WH.value] = merged[Col.GAS_BOILER_WH_NG_MODE.value][ + NG_mode + ] ## boiler sizing, after gas has been updated # determine peak boiler load for each equipment scenario @@ -1259,6 +1275,7 @@ def site_to_source( Col.BOILER_HHW_W_NG_MODE.value, Col.GAS_BOILER_WH_NG_MODE.value, Col.BOILER_EQ_CALC.value, + Col.FUEL_SWITCHING.value, "boiler_peak_hhw_W", ], axis=1, diff --git a/src/equipment.py b/src/equipment.py index c390273..822660a 100644 --- a/src/equipment.py +++ b/src/equipment.py @@ -11,6 +11,7 @@ # --- Models --- class PerformanceCurves(BaseModel): """Equipment performance curves: coefficient of performance (COP), capacity, and outdoor air temperature constraints.""" + cop: list[float] | None = None capacity_W: list[float] | None = None constraints: dict[str, float] | None = None @@ -21,7 +22,8 @@ class Performance(BaseModel): Leaving supply water temperatures, associated performance curves, and supply water temperature constraints. Outdoor air temperature curve for AWHPs, capacity curve for WWHPs, constant efficiency for boilers/chillers. """ - t_out_C: list[float] | None = None + + t_out_C: list[float] | None = None capacity_W: list[float] | None = None leaving_supply_t: dict[str, PerformanceCurves] | None = None efficiency: float | None = None @@ -29,21 +31,27 @@ class Performance(BaseModel): class Emissions(BaseModel): - """"Equipment emissions data.""" + """ "Equipment emissions data.""" + co2_kg_per_mwh: float + class Dimensions(BaseModel): """Equipment physical dimensions in metres.""" + length: float | None = None height: float | None = None width: float | None = None + class Electrical(BaseModel): """Equipment electrical characteristics: minimum circuit amperage (MCA), voltage, and phase.""" + mca: float | None = None voltage: float | None = None phase: int | None = None + class Equipment(BaseModel): eq_id: str eq_type: str @@ -95,10 +103,9 @@ class EquipmentScenario(DotAccessMixin, BaseModel): awhp_sizing_value: float awhp_redundancy: int awhp_use_cooling: bool - awhp_sizing_priority: ( - Literal["heating", "cooling", "larger"] | None - ) = None + awhp_sizing_priority: Literal["heating", "cooling", "larger"] | None = None backup_heating: str | None = None + fuel_switching: bool chiller: str | None = None From 466e65e9c5b0658ba927b31c5d9191d59369f9cd Mon Sep 17 00:00:00 2001 From: urwahah Date: Mon, 17 Aug 2026 18:00:16 -0700 Subject: [PATCH 03/48] update scen, add boiler, fix awhp sizing --- app.py | 4 +-- data/input/equipment_data.JSON | 65 ++++++++++++++++++++++++++++------ src/energy.py | 53 ++++++++++++++++++--------- 3 files changed, 92 insertions(+), 30 deletions(-) diff --git a/app.py b/app.py index d3a8561..9bbbd9b 100644 --- a/app.py +++ b/app.py @@ -10,8 +10,8 @@ from utils.logging_config import get_logger, setup_logging # Read level from environment variable (or default to INFO) -log_level_name = os.environ.get("LOG_LEVEL", "DEBUG") -log_level = getattr(logging, log_level_name.upper(), logging.DEBUG) +log_level_name = os.environ.get("LOG_LEVEL", "INFO") +log_level = getattr(logging, log_level_name.upper(), logging.INFO) setup_logging(level=log_level) # Get a logger for this module diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index 72ab06c..f0cf068 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -817,6 +817,31 @@ } } }, + { + "eq_id": "bo05", + "eq_type": "backup_heating", + "eq_subtype": "hot_water", + "eq_calc_type": "specific", + "model": "GenericBoiler", + "fuel": "natural_gas", + "capacity_W": 190500, + "dimensions": { + "length": 1.06, + "width": 0.833, + "height": 2.01 + }, + "operating_weight_g": 305000, + "electrical": { + "mca": 10, + "voltage": 120, + "phase": 1 + }, + "performance": { + "heating": { + "efficiency": 0.6 + } + } + }, { "eq_id": "ch01", "eq_type": "chiller", @@ -1248,37 +1273,55 @@ }, { "eq_scen_id": "eq_scenario_15", - "eq_scen_name": "High HHWST HR WWHP+100% AWHP (H+C)+Elec Backup", - "hr_wwhp": "hr03", + "eq_scen_name": "Gas Boiler+AC Chiller", + "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", - "hr_wwhp_h_supply_t": 60, - "awhp": "hp01", + "hr_wwhp_h_supply_t": 48.9, + "awhp": null, "awhp_performance_model": "interpolate_HHWST_fixed", "awhp_sizing_mode": "integer_sizing_peak_load", "awhp_sizing_value": 1, "awhp_redundancy": 1, - "awhp_h_supply_t": 52, - "awhp_use_cooling": true, + "awhp_h_supply_t": 38, + "awhp_use_cooling": false, "awhp_sizing_priority": "heating", - "backup_heating": "res02", + "backup_heating": "bo02", "fuel_switching": false, "chiller": "ch02" }, { "eq_scen_id": "eq_scenario_16", - "eq_scen_name": "100% (Frac) AWHP (H+C), Fuel Switching", + "eq_scen_name": "50% AWHP (H+C)+Gas Backup", "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", "hr_wwhp_h_supply_t": 48.9, "awhp": "hp01", "awhp_performance_model": "interpolate_HHWST_fixed", - "awhp_sizing_mode": "fractional_sizing_peak_load", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 0.5, + "awhp_redundancy": 1, + "awhp_h_supply_t": 38, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "bo02", + "fuel_switching": false, + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_17", + "eq_scen_name": "100% AWHP (H+C)+Fuel Switching", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": "hp01", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", "awhp_sizing_value": 1, "awhp_redundancy": 1, "awhp_h_supply_t": 38, "awhp_use_cooling": true, "awhp_sizing_priority": "heating", - "backup_heating": "bo03", + "backup_heating": "bo02", "fuel_switching": true, "chiller": "ch02" } @@ -1307,7 +1350,7 @@ { "group_id": "fuel_switching", "group_name": "Dynamic Fuel Switching", - "scenario_ids": ["eq_scenario_9", "eq_scenario_16"] + "scenario_ids": ["eq_scenario_15", "eq_scenario_16", "eq_scenario_4", "eq_scenario_17"] } ] } \ No newline at end of file diff --git a/src/energy.py b/src/energy.py index b33e7e5..a46f314 100644 --- a/src/energy.py +++ b/src/energy.py @@ -565,6 +565,11 @@ def loads_to_site_energy( # ---- scenario ---- scen = library.get_scenario(scenario_id) + if scen.fuel_switching: + df[Col.FUEL_SWITCHING.value] = True + else: + df[Col.FUEL_SWITCHING.value] = False + # ========================= # Phase 1 - HR WWHP (optional) # ========================= @@ -718,13 +723,13 @@ def loads_to_site_energy( # Determine reference capacity if sizing_priority == "heating": - sizing_load = "hhw_W" + sizing_load = Col.HHW_REM_W.value cap_ref = _awhp_reference_capacity( awhp_h, awhp_h_performance, awhp_h_supply_t, "heating" ) elif sizing_priority == "cooling": - sizing_load = "chw_W" + sizing_load = Col.CHW_REM_W.value cap_ref = _awhp_reference_capacity( awhp_c, awhp_c_performance, awhp_c_supply_t, "cooling" ) @@ -734,16 +739,20 @@ def loads_to_site_energy( "fractional_sizing_peak_load", ]: cap_ref = { - "hhw_W": _awhp_reference_capacity( + Col.HHW_REM_W.value: _awhp_reference_capacity( awhp_h, awhp_h_performance, awhp_h_supply_t, "heating" ), - "chw_W": _awhp_reference_capacity( + Col.CHW_REM_W.value: _awhp_reference_capacity( awhp_c, awhp_c_performance, awhp_c_supply_t, "cooling" ), } num = { - "hhw_W": float(df["hhw_W"].max()) * sizing_value / cap_ref["hhw_W"], - "chw_W": float(df["chw_W"].max()) * sizing_value / cap_ref["chw_W"], + Col.HHW_REM_W.value: float(df[Col.HHW_REM_W.value].max()) + * sizing_value + / cap_ref[Col.HHW_REM_W.value], + Col.CHW_REM_W.value: float(df[Col.CHW_REM_W.value].max()) + * sizing_value + / cap_ref[Col.CHW_REM_W.value], } sizing_load = max(num, key=num.get) cap_ref = cap_ref[sizing_load] @@ -785,11 +794,8 @@ def loads_to_site_energy( elec_h_Wh = served_h_W / awhp_cop_h if scen.fuel_switching: - df[Col.FUEL_SWITCHING.value] = True df[Col.HHW_REM_W_NG_MODE.value] = df[Col.HHW_REM_W.value].to_numpy() # store remaining HHW load before it gets updated (in case there is heat recovery preceding) - else: - df[Col.FUEL_SWITCHING.value] = False # add refrigerant information awhp_refrigerant = awhp_h.refrigerant if awhp_h.refrigerant else "Unknown" @@ -860,12 +866,22 @@ def loads_to_site_energy( df[Col.BOILER_EQ_CALC.value] = backup_heating.eq_calc_type df[Col.BOILER_CAP_W.value] = backup_heating.capacity_W - boiler_coverage = ( - (np.nansum(boiler_served_W) / np.nansum(df[Col.HHW_W.value])) * 100 - if np.nansum(df[Col.HHW_W.value]) > 0 - else 0 - ) - logger.debug(f"Phase 3 complete: Boiler covers {boiler_coverage:.1f}% of heating load") + if scen.fuel_switching: + logger.debug("Phase 3 complete") + # boiler coverage calculation would be incorrect for fuel switching so skipped here + else: + boiler_coverage = ( + ( + np.nansum(np.nansum(df[Col.BOILER_HHW_W.value])) + / np.nansum(df[Col.HHW_W.value]) + ) + * 100 + if np.nansum(df[Col.HHW_W.value]) > 0 + else 0 + ) + logger.debug( + f"Phase 3 complete: Boiler covers {boiler_coverage:.1f}% of heating load" + ) # ========================= # Phase 4 - Electric resistance (if heating remains) @@ -1223,8 +1239,10 @@ def site_to_source( df_fuel_switching = merged df_fuel_switching["NG_mode"] = NG_mode df_fuel_switching = ( - df_fuel_switching[[Col.EQ_SCEN_ID.value, Col.EQ_SCEN_NAME.value, "NG_mode"]] - .groupby([Col.EQ_SCEN_ID.value, Col.EQ_SCEN_NAME.value]) + df_fuel_switching[ + [Col.EQ_SCEN_ID.value, Col.EQ_SCEN_NAME.value, Col.FUEL_SWITCHING.value, "NG_mode"] + ] + .groupby([Col.EQ_SCEN_ID.value, Col.EQ_SCEN_NAME.value, Col.FUEL_SWITCHING.value]) .agg(NG_mode_hours=("NG_mode", "sum"), total_hours=("NG_mode", "size")) .reset_index() ) @@ -1277,6 +1295,7 @@ def site_to_source( Col.BOILER_EQ_CALC.value, Col.FUEL_SWITCHING.value, "boiler_peak_hhw_W", + "NG_mode", ], axis=1, ) From 707d0fd36df09e092e0fa57662a71b5c4910a55e Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 26 Aug 2026 12:40:49 -0700 Subject: [PATCH 04/48] add york YVWH HRC --- data/input/equipment_data.JSON | 82 ++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index 52e803d..ca1965b 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -206,6 +206,88 @@ } } }, + { + "eq_id": "hr06", + "eq_type": "hr_heat_pump", + "eq_subtype": "water_to_water", + "eq_calc_type": "specific", + "eq_manufacturer": "York", + "model": "YVWH", + "nominal_capacity_W": 1320000, + "fuel": "electricity", + "refrigerant": "R-515B", + "refrigerant_weight_g": 420000, + "refrigerant_gwp": 292, + "dimensions": { + "length": 4.2, + "width": 2.2, + "height": 2.5 + }, + "operating_weight_g": 10792000, + "electrical": { + "mca": 1100, + "voltage": 460, + "phase": 3 + }, + "performance": { + "heating": { + "capacity_W": [373400, 439600, 549500, 586200, 732700, 879200, 1025800, 1099000, 1172300, 1318900, 1377500], + "leaving_supply_t": { + "57.2": { + "cop": [4.374, 4.374, 4.374, 4.176, 4.176, 4.176, 4.176, 4.176, 4.072, 4.072, 4.072] + }, + "76.7": { + "cop": [2.327, 2.473, 2.43, 2.43, 2.54, 2.685, 2.736, 2.738, 2.738, 2.736, 2.754] + } + }, + "constraints": { + "min_temp_C": 57.2, + "max_temp_C": 76.7 + } + } + } + }, + { + "eq_id": "hr07", + "eq_type": "hr_heat_pump", + "eq_subtype": "water_to_water", + "eq_calc_type": "specific", + "eq_manufacturer": "York", + "model": "YVWH", + "nominal_capacity_W": 1320000, + "fuel": "electricity", + "refrigerant": "R-1234ze", + "refrigerant_weight_g": 420000, + "refrigerant_gwp": 1, + "dimensions": { + "length": 4.2, + "width": 2.2, + "height": 2.5 + }, + "operating_weight_g": 10792000, + "electrical": { + "mca": 1100, + "voltage": 460, + "phase": 3 + }, + "performance": { + "heating": { + "capacity_W": [373400, 439600, 549500, 586200, 732700, 879200, 1025800, 1099000, 1172300, 1318900, 1377500], + "leaving_supply_t": { + "57.2": { + "cop": [4.374, 4.374, 4.374, 4.176, 4.176, 4.176, 4.176, 4.176, 4.072, 4.072, 4.072] + }, + "76.7": { + "cop": [2.327, 2.473, 2.43, 2.43, 2.54, 2.685, 2.736, 2.738, 2.738, 2.736, 2.754] + } + }, + "constraints": { + "min_temp_C": 57.2, + "max_temp_C": 76.7 + } + } + } + }, { "eq_id": "hp01", "eq_type": "heat_pump", From fb06481dec41824626d10ae3fdc1f4a5aaf82301 Mon Sep 17 00:00:00 2001 From: urwahah Date: Sun, 30 Aug 2026 20:34:09 -0700 Subject: [PATCH 05/48] add flow CO2 AWHP --- data/input/equipment_data.JSON | 84 ++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index ca1965b..fc9464a 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -811,6 +811,90 @@ } } }, + { + "eq_id": "hp08", + "eq_type": "heat_pump", + "eq_subtype": "air_to_water", + "eq_calc_type": "specific", + "eq_manufacturer": "Flow", + "model": "ANSWR C", + "nominal_capacity_W": 70300, + "fuel": "electricity", + "refrigerant": "R-744", + "refrigerant_weight_g": 26000, + "refrigerant_gwp": 1, + "dimensions": { + "length": 2.26, + "width": 0.81, + "height": 1.93 + }, + "operating_weight_g": 1695075, + "electrical": { + "mca": 120, + "voltage": 460, + "phase": 3 + }, + "performance": { + "heating": { + "t_out_C": [-15, -8.3, 8.3], + "leaving_supply_t": { + "40": { + "cop": [2.35, 2.67, 3.95], + "capacity_W": [80900, 88500, 105200], + "constraints": { + "min_temp_C": -40, + "max_temp_C": 35 + } + }, + "49": { + "cop": [2.03, 2.28, 3.22], + "capacity_W": [80300, 87900, 103400], + "constraints": { + "min_temp_C": -23, + "max_temp_C": 35 + } + }, + "60": { + "cop": [1.8, 1.87, 2.4], + "capacity_W": [80000, 86800, 98500], + "constraints": { + "min_temp_C": -10, + "max_temp_C": 35 + } + }, + "82": { + "cop": [1.34, 1.46, 1.63], + "capacity_W": [61800, 65400, 66800], + "constraints": { + "min_temp_C": -10, + "max_temp_C": 35 + } + } + }, + "constraints": { + "min_temp_C": 40, + "max_temp_C": 82 + } + }, + "cooling": { + "t_out_C": [4.4, 15.6, 26.7, 37.8, 48.9], + "leaving_supply_t": { + "6.7": { + "cop": [5.05, 5.48, 3.42, 2.58, 1.87], + "capacity_W": [66800, 66800, 66800, 65200, 60600], + "constraints": { + "min_temp_C": -17, + "max_temp_C": 49 + } + } + }, + "constraints": { + "min_temp_C": 6.7, + "max_temp_C": 6.7 + } + } + } + }, { "eq_id": "bo01", "eq_type": "backup_heating", From 778069c90f5301524b6a33200e3f1df22aedc058 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Wed, 2 Sep 2026 14:49:11 -0700 Subject: [PATCH 06/48] fix: move download data button --- layout/shell.py | 11 +++++++++++ pages/results_page.py | 12 ------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/layout/shell.py b/layout/shell.py index 1c16251..e79e61a 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -70,6 +70,7 @@ def build_shell(page_content): # Scenario group selections (persisted across page navigation) dcc.Store(id="equipment-scenario-group-store", storage_type="session", data="default"), dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), + dcc.Download(id="download-data"), ] header = dmc.AppShellHeader( @@ -177,6 +178,16 @@ def build_navbar_content(): dmc.Stack(page_links, gap="sm"), dmc.Divider(), unit_toggle(), + dmc.Button( + "Download data", + rightSection=DashIconify(icon="material-symbols-light:download", width=18), + variant="outline", + color="blue", + styles={"root": {"borderColor": "var(--mantine-color-gray-3)"}}, + id="download-button", + n_clicks=0, + size="xs", + ), dmc.Divider(), legend_toggle(), html.Div( diff --git a/pages/results_page.py b/pages/results_page.py index 4407542..c086b5f 100644 --- a/pages/results_page.py +++ b/pages/results_page.py @@ -9,7 +9,6 @@ import pandas as pd import plotly.express as px from dash import Input, Output, State, callback, dcc -from dash_iconify import DashIconify from layout.charts import chart_tabs from layout.output import summary_project_info @@ -51,17 +50,6 @@ def layout(): ], gutter="md", ), - dmc.Button( - "Download data ", - rightSection=DashIconify(icon="material-symbols-light:download", width=20), - variant="outline", - color="blue", - id="download-button", - n_clicks=0, - style={"float": "right"}, - mr="md", - ), - dcc.Download(id="download-data"), ], fluid=True, ) From 45c80ff8ce418568f1d43da5b8cf458c3f401e13 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Wed, 2 Sep 2026 14:52:13 -0700 Subject: [PATCH 07/48] fix: show Scenario legend by default --- layout/input.py | 2 +- layout/shell.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/layout/input.py b/layout/input.py index 4ec8e7f..d288bb4 100644 --- a/layout/input.py +++ b/layout/input.py @@ -58,7 +58,7 @@ def legend_toggle(): id="legend-toggle", label="Show Scenario Legend", size="sm", - checked=False, + checked=True, ) diff --git a/layout/shell.py b/layout/shell.py index e79e61a..33baa32 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -193,7 +193,7 @@ def build_navbar_content(): html.Div( id="legend-container", children=scenario_legend_accordion(), - style={"display": "none"}, # Hidden by default + style={"display": "block"}, ), dmc.Divider(), dmc.Stack( # external resources section From fe3c8fd89c71bd7a746f0f436bf66e487be3d149 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 2 Sep 2026 16:08:46 -0700 Subject: [PATCH 08/48] add scenarios & groups --- data/input/equipment_data.JSON | 95 ++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index fc9464a..4df7b92 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -1414,6 +1414,91 @@ "awhp_sizing_priority": "heating", "backup_heating": "res02", "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_18", + "eq_scen_name": "100% R410A AWHP (H+C)+Elec Backup", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": "hp04", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 50, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "res02", + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_19", + "eq_scen_name": "100% R454B AWHP (H+C)+Elec Backup", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": "hp06", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 50, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "res02", + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_20", + "eq_scen_name": "100% CO2 AWHP (H+C)+Elec Backup", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": "hp08", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 40, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "res02", + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_21", + "eq_scen_name": "R-515B HR WWHP+100% AWHP (H+C)+Elec Backup", + "hr_wwhp": "hr06", + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 57.2, + "awhp": "hp01", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 38, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "res02", + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_22", + "eq_scen_name": "R-1234ze HR WWHP+100% AWHP (H+C)+Elec Backup", + "hr_wwhp": "hr07", + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 57.2, + "awhp": "hp01", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 38, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "res02", + "chiller": "ch02" } ], "scenario_groups": [ @@ -1436,6 +1521,16 @@ "group_id": "hhw_supply_temps", "group_name": "HHW Supply Temps", "scenario_ids": ["eq_scenario_4", "eq_scenario_13", "eq_scenario_14", "eq_scenario_5", "eq_scenario_15"] + }, + { + "group_id": "awhp_refrigerant_types", + "group_name": "Varying AWHP Refrigerant", + "scenario_ids": ["eq_scenario_18", "eq_scenario_19", "eq_scenario_20"] + }, + { + "group_id": "wwhp_refrigerant_types", + "group_name": "Varying WWHP Refrigerant", + "scenario_ids": ["eq_scenario_21", "eq_scenario_22"] } ] } \ No newline at end of file From 89b43561bb6eb695ca5267826e27f5cd5c129041 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 2 Sep 2026 18:18:00 -0700 Subject: [PATCH 09/48] address review comments --- data/input/equipment_data.JSON | 25 +++++++++++++++++++++---- pages/equipment_page.py | 2 +- src/energy.py | 3 +-- src/equipment.py | 2 +- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index f0cf068..e5ee3f2 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -1273,7 +1273,24 @@ }, { "eq_scen_id": "eq_scenario_15", - "eq_scen_name": "Gas Boiler+AC Chiller", + "eq_scen_name": "High HHWST HR WWHP+100% AWHP (H+C)+Elec Backup", + "hr_wwhp": "hr03", + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 60, + "awhp": "hp01", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 52, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "res02", + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_16", + "eq_scen_name": "90% Eff. Gas Boiler+AC Chiller", "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", "hr_wwhp_h_supply_t": 48.9, @@ -1290,7 +1307,7 @@ "chiller": "ch02" }, { - "eq_scen_id": "eq_scenario_16", + "eq_scen_id": "eq_scenario_17", "eq_scen_name": "50% AWHP (H+C)+Gas Backup", "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", @@ -1308,7 +1325,7 @@ "chiller": "ch02" }, { - "eq_scen_id": "eq_scenario_17", + "eq_scen_id": "eq_scenario_18", "eq_scen_name": "100% AWHP (H+C)+Fuel Switching", "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", @@ -1350,7 +1367,7 @@ { "group_id": "fuel_switching", "group_name": "Dynamic Fuel Switching", - "scenario_ids": ["eq_scenario_15", "eq_scenario_16", "eq_scenario_4", "eq_scenario_17"] + "scenario_ids": ["eq_scenario_16", "eq_scenario_17", "eq_scenario_4", "eq_scenario_18"] } ] } \ No newline at end of file diff --git a/pages/equipment_page.py b/pages/equipment_page.py index 1b7d25d..b206e7e 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -1201,7 +1201,7 @@ def update_fuel_switching(awhp_id, backup_heating_id, fuel_switching, equipment_ # get backup heating fuel equipment_list = equipment_data.get("equipment", []) if equipment_data else [] backup_heating = next((e for e in equipment_list if e.get("eq_id") == backup_heating_id), None) - backup_heating_fuel = backup_heating.get("fuel", "") + backup_heating_fuel = backup_heating.get("fuel", "") if backup_heating else "" # Disable input if AWHP is not selected, or if backup heating option is electric awhp_selected = awhp_id and awhp_id != "None" diff --git a/src/energy.py b/src/energy.py index a46f314..e41c0d0 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1236,7 +1236,7 @@ def site_to_source( ) # print number of fuel switching hours - df_fuel_switching = merged + df_fuel_switching = merged.copy() df_fuel_switching["NG_mode"] = NG_mode df_fuel_switching = ( df_fuel_switching[ @@ -1295,7 +1295,6 @@ def site_to_source( Col.BOILER_EQ_CALC.value, Col.FUEL_SWITCHING.value, "boiler_peak_hhw_W", - "NG_mode", ], axis=1, ) diff --git a/src/equipment.py b/src/equipment.py index 822660a..0a4e630 100644 --- a/src/equipment.py +++ b/src/equipment.py @@ -105,7 +105,7 @@ class EquipmentScenario(DotAccessMixin, BaseModel): awhp_use_cooling: bool awhp_sizing_priority: Literal["heating", "cooling", "larger"] | None = None backup_heating: str | None = None - fuel_switching: bool + fuel_switching: bool = False chiller: str | None = None From 70d8e58d7e1828b7daca1a18537edd126d4ab40c Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 2 Sep 2026 18:25:35 -0700 Subject: [PATCH 10/48] update eq_scen ids --- data/input/equipment_data.JSON | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index 4df7b92..c70f04a 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -1416,7 +1416,7 @@ "chiller": "ch02" }, { - "eq_scen_id": "eq_scenario_18", + "eq_scen_id": "eq_scenario_19", "eq_scen_name": "100% R410A AWHP (H+C)+Elec Backup", "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", @@ -1433,7 +1433,7 @@ "chiller": "ch02" }, { - "eq_scen_id": "eq_scenario_19", + "eq_scen_id": "eq_scenario_20", "eq_scen_name": "100% R454B AWHP (H+C)+Elec Backup", "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", @@ -1450,7 +1450,7 @@ "chiller": "ch02" }, { - "eq_scen_id": "eq_scenario_20", + "eq_scen_id": "eq_scenario_21", "eq_scen_name": "100% CO2 AWHP (H+C)+Elec Backup", "hr_wwhp": null, "hr_wwhp_performance_model": "interpolate_HHWST", @@ -1467,7 +1467,7 @@ "chiller": "ch02" }, { - "eq_scen_id": "eq_scenario_21", + "eq_scen_id": "eq_scenario_22", "eq_scen_name": "R-515B HR WWHP+100% AWHP (H+C)+Elec Backup", "hr_wwhp": "hr06", "hr_wwhp_performance_model": "interpolate_HHWST", @@ -1484,7 +1484,7 @@ "chiller": "ch02" }, { - "eq_scen_id": "eq_scenario_22", + "eq_scen_id": "eq_scenario_23", "eq_scen_name": "R-1234ze HR WWHP+100% AWHP (H+C)+Elec Backup", "hr_wwhp": "hr07", "hr_wwhp_performance_model": "interpolate_HHWST", @@ -1525,12 +1525,12 @@ { "group_id": "awhp_refrigerant_types", "group_name": "Varying AWHP Refrigerant", - "scenario_ids": ["eq_scenario_18", "eq_scenario_19", "eq_scenario_20"] + "scenario_ids": ["eq_scenario_19", "eq_scenario_20", "eq_scenario_21"] }, { "group_id": "wwhp_refrigerant_types", "group_name": "Varying WWHP Refrigerant", - "scenario_ids": ["eq_scenario_21", "eq_scenario_22"] + "scenario_ids": ["eq_scenario_22", "eq_scenario_23"] } ] } \ No newline at end of file From b7453b7144e0a48cefba994f7775bb12436c95a8 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Fri, 4 Sep 2026 16:48:12 -0700 Subject: [PATCH 11/48] fix: address minor callback error after merging #154 --- pages/equipment_page.py | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/pages/equipment_page.py b/pages/equipment_page.py index b206e7e..f42ef82 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -225,7 +225,6 @@ def populate_group_dropdown(pathname, equipment_data): @callback( Output("displayed-equipment-store", "data", allow_duplicate=True), Output("selected-equipment-store", "data", allow_duplicate=True), - Output("equipment-checkbox-group", "value", allow_duplicate=True), Output("equipment-scenario-group-store", "data", allow_duplicate=True), Output("equipment-store", "data", allow_duplicate=True), Input("scenario-group-select", "value"), @@ -244,21 +243,21 @@ def handle_group_selection(group_id, equipment_data, initial_data, stored_group) # When dropdown is cleared, clear the stored group to allow re-selecting if not group_id: if stored_group is not None: - return no_update, no_update, no_update, None, no_update - return no_update, no_update, no_update, no_update, no_update + return no_update, no_update, None, no_update + return no_update, no_update, no_update, no_update if not equipment_data: - return no_update, no_update, no_update, no_update, no_update + return no_update, no_update, no_update, no_update # Skip if this is just restoring the same group (don't overwrite manual edits) if group_id == stored_group: - return no_update, no_update, no_update, no_update, no_update + return no_update, no_update, no_update, no_update groups = equipment_data.get("scenario_groups", []) selected_group = next((g for g in groups if g.get("group_id") == group_id), None) if not selected_group: - return no_update, no_update, no_update, no_update, no_update + return no_update, no_update, no_update, no_update scenario_ids = selected_group.get("scenario_ids", []) scenario_ids_set = set(scenario_ids) @@ -298,8 +297,8 @@ def handle_group_selection(group_id, equipment_data, initial_data, stored_group) "equipment_scenarios": updated_scenarios, } - # Update displayed, selected, checkbox group, persist group selection, and equipment store - return scenario_ids, scenario_ids, scenario_ids, group_id, updated_equipment + # Update displayed, selected, persist group selection, and equipment store + return scenario_ids, scenario_ids, group_id, updated_equipment @callback( @@ -486,7 +485,6 @@ def sync_active_equipment(selected_values, displayed_ids): Output("displayed-equipment-store", "data"), Output("equipment-store", "data", allow_duplicate=True), Output("selected-equipment-store", "data", allow_duplicate=True), - Output("equipment-checkbox-group", "value", allow_duplicate=True), Input({"type": "equipment-column-dropdown", "column": ALL}, "value"), State("displayed-equipment-store", "data"), State("equipment-store", "data"), @@ -499,11 +497,11 @@ def handle_column_dropdown_change(dropdown_values, displayed_ids, equipment_data If selected scenario is already displayed elsewhere, create a copy. """ if not dropdown_values or not displayed_ids or not equipment_data: - return no_update, no_update, no_update, no_update + return no_update, no_update, no_update ctx = callback_context if not ctx.triggered: - return no_update, no_update, no_update, no_update + return no_update, no_update, no_update # Find which dropdown triggered the callback triggered = ctx.triggered[0] @@ -515,21 +513,21 @@ def handle_column_dropdown_change(dropdown_values, displayed_ids, equipment_data btn_id = json.loads(id_str) column_idx = btn_id.get("column") except (json.JSONDecodeError, AttributeError): - return no_update, no_update, no_update, no_update + return no_update, no_update, no_update if column_idx is None: - return no_update, no_update, no_update, no_update + return no_update, no_update, no_update # Get the newly selected scenario ID new_scen_id = dropdown_values[column_idx] if not new_scen_id: - return no_update, no_update, no_update, no_update + return no_update, no_update, no_update # Exit early if the selection hasn't actually changed old_scen_id = displayed_ids[column_idx] if column_idx < len(displayed_ids) else None if new_scen_id == old_scen_id: - return no_update, no_update, no_update, no_update + return no_update, no_update, no_update # Check if this scenario is already displayed in another column new_displayed = list(displayed_ids) @@ -544,7 +542,7 @@ def handle_column_dropdown_change(dropdown_values, displayed_ids, equipment_data base_scenario = next((s for s in scenarios if s.get("eq_scen_id") == new_scen_id), None) if base_scenario is None: - return no_update, no_update, no_update, no_update + return no_update, no_update, no_update # Generate new ID copy_id = _next_scenario_id(equipment_data) @@ -578,7 +576,7 @@ def handle_column_dropdown_change(dropdown_values, displayed_ids, equipment_data old_index = new_selected.index(old_scen_id) new_selected[old_index] = new_displayed[column_idx] - return new_displayed, updated_equipment, new_selected, new_selected + return new_displayed, updated_equipment, new_selected @callback( From 99efd93c22058e952dfc7d1df183cdc28e06ce6f Mon Sep 17 00:00:00 2001 From: urwahah Date: Mon, 7 Sep 2026 13:38:20 -0700 Subject: [PATCH 12/48] average emissions factor calculation --- app.py | 4 +- src/energy.py | 122 ++++++++++++++++++++++++++++---------------------- 2 files changed, 70 insertions(+), 56 deletions(-) diff --git a/app.py b/app.py index 9bbbd9b..d3a8561 100644 --- a/app.py +++ b/app.py @@ -10,8 +10,8 @@ from utils.logging_config import get_logger, setup_logging # Read level from environment variable (or default to INFO) -log_level_name = os.environ.get("LOG_LEVEL", "INFO") -log_level = getattr(logging, log_level_name.upper(), logging.INFO) +log_level_name = os.environ.get("LOG_LEVEL", "DEBUG") +log_level = getattr(logging, log_level_name.upper(), logging.DEBUG) setup_logging(level=log_level) # Get a logger for this module diff --git a/src/energy.py b/src/energy.py index e41c0d0..c56ebb5 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1149,9 +1149,6 @@ def site_to_source( f"Processing emission scenario: {em_scen_id}, year={metadata[em_scen_id].year}" ) - emissions_data = get_emissions_data(metadata[em_scen_id]) - logger.debug(f"Loaded {len(emissions_data.df)} emission data rows") - em_scen = metadata[em_scen_id] shortrun_weighting = float(em_scen.shortrun_weighting) @@ -1166,62 +1163,79 @@ def site_to_source( base[Col.HOUR.value] = base.index.hour base[Col.DOY.value] = base.index.dayofyear - # collapse emissions to month-hour averages - emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month - emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour - emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting - group_cols = [Col.MONTH.value, Col.HOUR.value] - - # all rates are in gCO2e/kWh - if em_scen.emission_type == "Combustion only": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) - ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) - elif em_scen.emission_type == "Includes pre-combustion": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - ( - emissions_data.df[Col.LRMER_CO2E_C.value] - + emissions_data.df[Col.LRMER_CO2E_P.value] - ) - * (1 - shortrun_weighting) - ) + ( - ( - emissions_data.df[Col.SRMER_CO2E_C.value] - + emissions_data.df[Col.SRMER_CO2E_P.value] - ) - * shortrun_weighting + elec_emissions_source = "average" # em_scen.elec_emissions_source + if elec_emissions_source == "marginal": # replace direct with em_scen.elec_emissions_source + emissions_data = get_emissions_data(metadata[em_scen_id]) + logger.debug( + f"Marginal electricity emissions: Loaded {len(emissions_data.df)} emission data rows" ) - else: - raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") - - df_em = ( - emissions_data.df.groupby(group_cols)[ - [ - Col.ELEC_EMISSIONS_RATE_G_PER_KWH, - Col.LRMER_CO2E_C.value, - Col.LRMER_CO2E_P.value, - Col.LRMER_CO2E.value, - Col.SRMER_CO2E_C.value, - Col.SRMER_CO2E_P.value, - Col.SRMER_CO2E.value, - Col.SHORTRUN_WEIGHTING.value, + + # collapse emissions to month-hour averages + emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month + emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour + emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting + group_cols = [Col.MONTH.value, Col.HOUR.value] + + # all rates are in gCO2e/kWh + if em_scen.emission_type == "Combustion only": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) + ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) + elif em_scen.emission_type == "Includes pre-combustion": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + ( + emissions_data.df[Col.LRMER_CO2E_C.value] + + emissions_data.df[Col.LRMER_CO2E_P.value] + ) + * (1 - shortrun_weighting) + ) + ( + ( + emissions_data.df[Col.SRMER_CO2E_C.value] + + emissions_data.df[Col.SRMER_CO2E_P.value] + ) + * shortrun_weighting + ) + else: + raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") + + df_em = ( + emissions_data.df.groupby(group_cols)[ + [ + Col.ELEC_EMISSIONS_RATE_G_PER_KWH, + Col.LRMER_CO2E_C.value, + Col.LRMER_CO2E_P.value, + Col.LRMER_CO2E.value, + Col.SRMER_CO2E_C.value, + Col.SRMER_CO2E_P.value, + Col.SRMER_CO2E.value, + Col.SHORTRUN_WEIGHTING.value, + ] ] - ] - .mean() - .reset_index() - ) + .mean() + .reset_index() + ) + + # expand loads with this year's emissions + merged = base.merge(df_em, on=[Col.MONTH.value, Col.HOUR.value], how="left") - # expand loads with this year's emissions - merged = base.merge(df_em, on=[Col.MONTH.value, Col.HOUR.value], how="left") + nan_count = merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH].isna().sum() + if nan_count > 0: + logger.warning(f"Merge produced {nan_count} rows with missing emission rates") - nan_count = merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH].isna().sum() - if nan_count > 0: - logger.warning(f"Merge produced {nan_count} rows with missing emission rates") + # Note: Keep original load data year (already extracted above) for timestamp + # reconstruction. This avoids Feb 29 errors when leap year load data is + # used with non-leap emission scenario years. Emissions are still correct + # because they're matched by month+hour pattern. - # Note: Keep original load data year (already extracted above) for timestamp - # reconstruction. This avoids Feb 29 errors when leap year load data is - # used with non-leap emission scenario years. Emissions are still correct - # because they're matched by month+hour pattern. + elif elec_emissions_source == "average": + # elec_emissions_rate = float(em_scen.elec_emission_rate_gCO2e_per_kWh) + elec_emissions_rate = 500 + logger.debug(f"Average electricity emissions: {elec_emissions_rate} gCO2e/kWh") + + merged = base.copy() + merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = elec_emissions_rate + else: + raise ValueError(f"Invalid elec_emissions_source: {em_scen.elec_emissions_source}") ## fuel switching logic emissions_intensity_HP = ( From bd81e225aff43462d3b9fc10cedf5cde9da1bf8f Mon Sep 17 00:00:00 2001 From: urwahah Date: Mon, 7 Sep 2026 15:52:02 -0700 Subject: [PATCH 13/48] add emissions source and avg factor inputs --- data/input/metadata_index.json | 4 ++ layout/input.py | 55 +++++++++++++++++++--- pages/emissions_page.py | 83 +++++++++++++++++++++++++++++----- src/config.py | 13 +++++- src/emissions.py | 2 + src/energy.py | 22 +++++---- src/metadata.py | 6 +++ tests/conftest.py | 2 + utils/units.py | 2 +- 9 files changed, 159 insertions(+), 30 deletions(-) diff --git a/data/input/metadata_index.json b/data/input/metadata_index.json index b36d172..d3c3ddf 100644 --- a/data/input/metadata_index.json +++ b/data/input/metadata_index.json @@ -63,6 +63,10 @@ ] }, "emissions": { + "elec_emission_source" : [ + "Marginal", + "Average" + ], "year": [ 2025, 2030, diff --git a/layout/input.py b/layout/input.py index f484767..5e5842b 100644 --- a/layout/input.py +++ b/layout/input.py @@ -1103,7 +1103,7 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un view_mode: One of "simple", "advanced", or "differences" unit_mode: "SI" or "IP" for unit conversion """ - from utils.units import get_unit_converter, get_unit_label + from utils.units import get_converter, get_display_unit emission_df = pd.DataFrame(emission_data) if isinstance(emission_data, list) else emission_data @@ -1121,12 +1121,18 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un # Sort for stable column order emission_df = emission_df.sort_values("em_scen_id").reset_index(drop=True) - # Get unit label for NG emission rate (dynamic based on unit_mode) - ng_emission_rate_unit = get_unit_label("emissions_rate", unit_mode) + # Get unit label for emission rates (dynamic based on unit_mode) + ng_emission_rate_unit = get_display_unit("gas_emission_factor", unit_mode) + elec_emission_rate_unit = get_display_unit("emissions_rate", unit_mode) # Rows to display (property name, label) # Note: em_scen_id is excluded as it's shown in the header row_config = [ + ("elec_emission_source", "Grid emissions source"), + ( + "elec_avg_emission_rate_gCO2e_per_kWh", + f"Average grid emissions rate ({elec_emission_rate_unit})", + ), ("grid_scenario", "Grid Scenario"), ("gea_grid_region", "GEA Grid Region"), ("emission_type", "Emission Type"), @@ -1256,8 +1262,9 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un # ---------- Property rows ---------- diff_row_style = TABLE_STYLE.diff_row_style - # Get converter for NG emission rate values - ng_emission_rate_converter = get_unit_converter("emissions_rate", unit_mode) + # Get converter for emission rate values + ng_emission_rate_converter = get_converter("gas_emission_factor", unit_mode) + elec_emission_rate_converter = get_converter("emissions_rate", unit_mode) for field, label in available_rows: is_diff_row = field in diff_fields @@ -1272,13 +1279,19 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un for idx, scen_id in enumerate(scen_ids): raw_value = emission_df.iloc[idx].get(field, "") - # Apply unit conversion for NG emission rate + # Apply unit conversion for emission rates if field == "ng_emission_rate_gCO2e_per_kWh" and raw_value is not None: try: converted = ng_emission_rate_converter(float(raw_value)) display_value = f"{converted:.2f}" except (ValueError, TypeError): display_value = format_table_value(raw_value, field_name=field) + elif field == "elec_avg_emission_rate_gCO2e_per_kWh" and raw_value is not None: + try: + converted = elec_emission_rate_converter(float(raw_value)) + display_value = f"{converted:.2f}" + except (ValueError, TypeError): + display_value = format_table_value(raw_value, field_name=field) else: display_value = format_table_value(raw_value, field_name=field) @@ -1847,6 +1860,36 @@ def _options(values): ], grow=True, ), + dmc.SimpleGrid( + cols=2, + spacing="md", + children=[ + dmc.Select( + id="edit-em-elec-source", + label="Grid emissions source", + placeholder="Select grid emissions source", + data=_options(emissions_index["elec_emission_source"]), + searchable=True, + clearable=False, + ), + dmc.Stack( + [ + dmc.Text( + id="edit-em-elec-emission-rate-label", + children="Average grid emissions rate (g/kWh)", + size="sm", + fw=500, + ), + dmc.NumberInput( + id="edit-em-elec-avg-emission-rate", + min=0, + step=1, + ), + ], + gap=4, + ), + ], + ), dmc.SimpleGrid( cols=2, spacing="md", diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 42c7841..64fe92f 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -261,6 +261,8 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store default_ids.append("em_scenario_c") # Get defaults + default_elec_emission_source = EmissionScenarioDefaults.ELEC_EMISSION_SOURCE.value + default_elec_avg_emission_rate = EmissionScenarioDefaults.ELEC_AVG_EMISSION_RATE_G_KWH.value default_year = EmissionScenarioDefaults.YEAR.value default_leakage = EmissionScenarioDefaults.REFRIGERANT_LEAKAGE.value default_emission_type = EmissionScenarioDefaults.EMISSION_TYPE.value @@ -280,6 +282,8 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store existing_scenarios[0].copy() if existing_scenarios else { + "elec_emission_source": default_elec_emission_source, + "elec_avg_emission_rate_gCO2e_per_kWh": default_elec_avg_emission_rate, "grid_scenario": "MidCase", "gea_grid_region": None, "time_zone": "America/Los_Angeles", @@ -557,6 +561,8 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): Output("emissions-edit-modal", "opened"), Output("edit-em-scenario-id-input", "value"), Output("edit-em-scenario-name-input", "value"), + Output("edit-em-elec-source", "value"), + Output("edit-em-elec-avg-emission-rate", "value"), Output("edit-em-grid-scenario", "value"), Output("edit-em-gea-grid-region", "value"), Output("edit-em-time-zone", "value"), @@ -573,7 +579,7 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): ) def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): if not any(edit_clicks or []): - return (no_update,) * 12 + return (no_update,) * 14 if not metadata_data or "emission_settings" not in metadata_data: return ( @@ -581,6 +587,8 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", + None, + "", "", "", "", @@ -595,7 +603,7 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): triggered = callback_context.triggered if not triggered: - return (no_update,) * 12 + return (no_update,) * 14 prop_id = triggered[0]["prop_id"] id_str = prop_id.split(".")[0] @@ -608,6 +616,8 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", + None, + "", "", "", "", @@ -627,6 +637,8 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", + None, + "", "", "", "", @@ -637,29 +649,40 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): f"Scenario {em_scen_id!r} not found.", ) - # Convert NG emissions rate for display based on unit mode + # Convert emissions rates for display based on unit mode + from utils.units import get_converter + ng_emission_rate_base = scen.get("ng_emission_rate_gCO2e_per_kWh") if ng_emission_rate_base is not None and unit_mode == "IP": - from utils.units import get_unit_converter - - ng_converter = get_unit_converter("emissions_rate", "IP") + ng_converter = get_converter("gas_emission_factor", "IP") ng_emission_rate_display = ng_converter(float(ng_emission_rate_base)) else: ng_emission_rate_display = ng_emission_rate_base + elec_avg_emission_rate_base = scen.get("elec_avg_emission_rate_gCO2e_per_kWh") + if elec_avg_emission_rate_base is not None and unit_mode == "IP": + elec_converter = get_converter("emissions_rate", "IP") + elec_avg_emission_rate_display = elec_converter(float(elec_avg_emission_rate_base)) + else: + elec_avg_emission_rate_display = elec_avg_emission_rate_base + # Round refrigerant leakage to 2 decimal places for display refrig_leakage = scen.get("annual_refrig_leakage_percent") if refrig_leakage is not None: refrig_leakage = round(float(refrig_leakage), 2) - # Round NG emission rate display to 2 decimal places + # Round emission rate display to 2 decimal places if ng_emission_rate_display is not None: ng_emission_rate_display = round(float(ng_emission_rate_display), 2) + if elec_avg_emission_rate_display is not None: + elec_avg_emission_rate_display = round(float(elec_avg_emission_rate_display), 2) return ( True, scen.get("em_scen_id"), scen.get("em_scen_name", ""), + scen.get("elec_emission_source", ""), + elec_avg_emission_rate_display, scen.get("grid_scenario", ""), scen.get("gea_grid_region", ""), scen.get("time_zone", ""), @@ -679,6 +702,8 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): Input("edit-em-scenario-save-btn", "n_clicks"), State("edit-em-scenario-id-input", "value"), State("edit-em-scenario-name-input", "value"), + State("edit-em-elec-source", "value"), + State("edit-em-elec-avg-emission-rate", "value"), State("edit-em-grid-scenario", "value"), State("edit-em-gea-grid-region", "value"), State("edit-em-time-zone", "value"), @@ -695,6 +720,8 @@ def save_edit_emission( n_clicks, scen_id, scen_name, + elec_emission_source, + elec_avg_emission_rate, grid_scenario, gea_grid_region, time_zone, @@ -736,6 +763,14 @@ def save_edit_emission( except (TypeError, ValueError): ng_emission_rate = 0.0 + try: + elec_avg_emission_rate = ( + float(elec_avg_emission_rate) if elec_avg_emission_rate is not None else None + ) + except (TypeError, ValueError): + elec_avg_emission_rate = None + # default avg emission rate is None to generate an error if calculation is run without a valid input + # Convert NG emissions rate back to base units (g/kWh) if in IP mode unit_mode = unit_mode or "SI" if unit_mode == "IP" and ng_emission_rate > 0: @@ -745,6 +780,13 @@ def save_edit_emission( # g/kWh = (lb/kBTU) / (g_to_lb / Wh_to_BTU) ng_emission_rate = ng_emission_rate / (g_to_lb / Wh_to_BTU) + if unit_mode == "IP" and elec_avg_emission_rate is not None: + from utils.units import g_to_lb + + # IP unit is lb/kWh, convert back to g/kWh + # g/kWh = (lb/kWh) / (g_to_lb) + elec_avg_emission_rate = elec_avg_emission_rate / (g_to_lb) + scenarios = metadata_data.get("emission_settings", []) updated = False new_scenarios = [] @@ -753,6 +795,8 @@ def save_edit_emission( if scen.get("em_scen_id") == scen_id: new_scen = scen.copy() new_scen["em_scen_name"] = scen_name or scen.get("em_scen_name", "") + new_scen["elec_emission_source"] = elec_emission_source + new_scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate new_scen["grid_scenario"] = grid_scenario new_scen["gea_grid_region"] = gea_grid_region new_scen["time_zone"] = time_zone @@ -788,15 +832,18 @@ def cancel_edit_emission_modal(n_clicks): @callback( Output("edit-em-ng-emission-rate-label", "children"), + Output("edit-em-elec-emission-rate-label", "children"), Input("unit-toggle", "value"), ) -def update_ng_emissions_rate_label(unit_mode): - """Update NG emissions rate label based on unit mode.""" - from utils.units import get_unit_label +def update_emissions_rate_label(unit_mode): + """Update NG/elec emissions rate label based on unit mode.""" + from utils.units import get_display_unit unit_mode = unit_mode or "SI" - ng_unit = get_unit_label("emissions_rate", unit_mode) - return f"Gas emissions rate ({ng_unit})" + ng_unit = get_display_unit("gas_emission_factor", unit_mode) + elec_unit = get_display_unit("emissions_rate", unit_mode) + + return f"Gas emissions rate ({ng_unit})", f"Average grid emissions rate ({elec_unit})" @callback( @@ -984,3 +1031,15 @@ def update_ng_rate_on_emission_type_change(emission_type, unit_mode): ) return ng_emission_rate + + +@callback( + Output("edit-em-elec-avg-emission-rate", "disabled"), + Input("edit-em-elec-source", "value"), + prevent_initial_call=True, +) +def update_avg_emission_on_source_change(emission_source): + """Enable/disable average grid emissions input when emission source changes.""" + disable_avg = emission_source != "Average" + + return disable_avg diff --git a/src/config.py b/src/config.py index 4c3338b..f9cceae 100644 --- a/src/config.py +++ b/src/config.py @@ -44,8 +44,17 @@ class EquipmentTableRows(Enum): class EmissionTableRows(Enum): """Row configurations for emission table view modes.""" - SIMPLE = ("grid_scenario", "gea_grid_region", "emission_type", "year") + SIMPLE = ( + "elec_emission_source", + "elec_avg_emission_rate_gCO2e_per_kWh", + "grid_scenario", + "gea_grid_region", + "emission_type", + "year", + ) ADVANCED = ( + "elec_emission_source", + "elec_avg_emission_rate_gCO2e_per_kWh", "grid_scenario", "gea_grid_region", "emission_type", @@ -59,6 +68,8 @@ class EmissionTableRows(Enum): class EmissionScenarioDefaults(Enum): """Default values for emission scenario parameters.""" + ELEC_EMISSION_SOURCE: str = "Marginal" + ELEC_AVG_EMISSION_RATE_G_KWH: float = None YEAR: int = 2025 REFRIGERANT_LEAKAGE: float = 0.02 EMISSION_TYPE: str = "Includes pre-combustion" diff --git a/src/emissions.py b/src/emissions.py index 2c39029..52a4ffe 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -10,6 +10,8 @@ class EmissionScenario(DotAccessMixin, BaseModel): em_scen_id: str em_scen_name: str + elec_emission_source: str + elec_avg_emission_rate_gCO2e_per_kWh: float | None = None grid_scenario: str gea_grid_region: str | None = None time_zone: str diff --git a/src/energy.py b/src/energy.py index c56ebb5..15502f0 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1163,11 +1163,10 @@ def site_to_source( base[Col.HOUR.value] = base.index.hour base[Col.DOY.value] = base.index.dayofyear - elec_emissions_source = "average" # em_scen.elec_emissions_source - if elec_emissions_source == "marginal": # replace direct with em_scen.elec_emissions_source + if em_scen.elec_emission_source == "Marginal": emissions_data = get_emissions_data(metadata[em_scen_id]) logger.debug( - f"Marginal electricity emissions: Loaded {len(emissions_data.df)} emission data rows" + f"Marginal grid emissions: Loaded {len(emissions_data.df)} emission data rows" ) # collapse emissions to month-hour averages @@ -1227,15 +1226,18 @@ def site_to_source( # used with non-leap emission scenario years. Emissions are still correct # because they're matched by month+hour pattern. - elif elec_emissions_source == "average": - # elec_emissions_rate = float(em_scen.elec_emission_rate_gCO2e_per_kWh) - elec_emissions_rate = 500 - logger.debug(f"Average electricity emissions: {elec_emissions_rate} gCO2e/kWh") + elif em_scen.elec_emission_source == "Average": + elec_avg_emission_rate = em_scen.elec_avg_emission_rate_gCO2e_per_kWh + if elec_avg_emission_rate is not None: + logger.debug(f"Average grid emissions: {elec_avg_emission_rate} gCO2e/kWh") + + merged = base.copy() + merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = float(elec_avg_emission_rate) + else: + raise ValueError("Provide a valid input value for average grid emissions rate.") - merged = base.copy() - merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = elec_emissions_rate else: - raise ValueError(f"Invalid elec_emissions_source: {em_scen.elec_emissions_source}") + raise ValueError(f"Invalid elec_emissions_source: {em_scen.elec_emission_source}") ## fuel switching logic emissions_intensity_HP = ( diff --git a/src/metadata.py b/src/metadata.py index 76740e9..4b36e68 100644 --- a/src/metadata.py +++ b/src/metadata.py @@ -97,6 +97,8 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_a", em_scen_name="2025", + elec_emission_source="Marginal", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, time_zone="America/Los_Angeles", @@ -109,6 +111,8 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_b", em_scen_name="2035", + elec_emission_source="Marginal", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, time_zone="America/Los_Angeles", @@ -121,6 +125,8 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_c", em_scen_name="2045", + elec_emission_source="Marginal", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, time_zone="America/Los_Angeles", diff --git a/tests/conftest.py b/tests/conftest.py index 80ec79b..511abb3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -54,6 +54,8 @@ def emission_scenario(): """Create a sample emission scenario for testing.""" return EmissionScenario( em_scen_id="test_em_1", + elec_emission_source="Marginal", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region="CAMX", time_zone="America/Los_Angeles", diff --git a/utils/units.py b/utils/units.py index 707945f..9efe09d 100644 --- a/utils/units.py +++ b/utils/units.py @@ -185,7 +185,7 @@ def sqft_to_sqm(sqft): "emissions_rate": { "base": "g CO₂e/kWh", "SI": {"unit": "g CO₂e/kWh", "func": lambda x: x}, - "IP": {"unit": "lb CO₂e/kBTU", "func": lambda x: x * g_to_lb / Wh_to_BTU}, + "IP": {"unit": "lb CO₂e/kWh", "func": lambda x: x * g_to_lb}, }, # --- Gas emission factor --- "gas_emission_factor": { From 3490220eab796d0643ae70eabf05f6d709beda28 Mon Sep 17 00:00:00 2001 From: urwahah Date: Mon, 7 Sep 2026 16:31:20 -0700 Subject: [PATCH 14/48] add scenario group --- pages/emissions_page.py | 58 ++++++++++++++++++++++++++++++++++++----- src/config.py | 1 + 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 64fe92f..7e23c0c 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -102,6 +102,10 @@ def layout(): "label": "Combustion vs pre-combustion", "value": "emission_types", }, + { + "label": "Average vs marginal emissions", + "value": "emission_sources", + }, ], value=None, placeholder="Select a scenario group", @@ -237,6 +241,7 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store - year: Varies years (2025, 2035, 2045), others reset to defaults - refrigerant_leakage: Varies leakage (0.01, 0.05, 0.1), others reset to defaults - emission_types: Varies emission type ("Includes pre-combustion" vs "Combustion only"), others reset to defaults + - emission_sources: Varies emission source (average and marginal) and associated values for emissions rate and short-run weighting, others reset to defaults """ # When dropdown is cleared, clear the stored group to allow re-selecting if not group_id: @@ -259,6 +264,8 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store default_ids = ["em_scenario_a", "em_scenario_b"] if group_id != "emission_types": # only two scenarios for comparing emission types default_ids.append("em_scenario_c") + if group_id == "emission_sources": # fourth scenario for comparing emission sources + default_ids.append("em_scenario_d") # Get defaults default_elec_emission_source = EmissionScenarioDefaults.ELEC_EMISSION_SOURCE.value @@ -266,6 +273,7 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store default_year = EmissionScenarioDefaults.YEAR.value default_leakage = EmissionScenarioDefaults.REFRIGERANT_LEAKAGE.value default_emission_type = EmissionScenarioDefaults.EMISSION_TYPE.value + default_shortrun_weighting = EmissionScenarioDefaults.SHORTRUN_WEIGHTING.value default_ng_emission_rate = EmissionScenarioDefaults.NG_EMISSION_RATE_G_KWH.value # Define the variation values and default IDs @@ -276,6 +284,15 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store EmissionScenarioDefaults.NG_EMISSION_RATE_G_KWH_COMBUSTION.value, default_ng_emission_rate, ] + elec_emission_source_values = ["Average", "Average", "Marginal", "Marginal"] + elec_avg_emission_rate_values = [400, 0, None, None] + shortun_weighting_values = [0, 0, 1, 0] + emission_sources_names = [ + "Average Emissions (Typical)", + "Average Emissions (Zero)", + "Marginal Emissions (Short-run)", + "Marginal Emissions (Long-run)", + ] # Create base scenario template from first existing scenario or defaults base_scenario = ( @@ -288,14 +305,14 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store "gea_grid_region": None, "time_zone": "America/Los_Angeles", "emission_type": default_emission_type, - "shortrun_weighting": 0, + "shortrun_weighting": default_shortrun_weighting, "annual_refrig_leakage_percent": default_leakage, "ng_emission_rate_gCO2e_per_kWh": default_ng_emission_rate, "year": default_year, } ) - # Reset to default 2/3 scenarios (a, b, optionally c) with group-specific values + # Reset to default 2/3/4 scenarios (a, b, optionally c & d) with group-specific values updated_scenarios = [] for idx, scen_id in enumerate(default_ids): scen = {**base_scenario, "em_scen_id": scen_id, "em_scen_name": ""} @@ -303,27 +320,56 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store if group_id == "year": # Vary year, reset others to defaults scen["year"] = year_values[idx % len(year_values)] + scen["em_scen_name"] = str(scen["year"]) + scen["annual_refrig_leakage_percent"] = default_leakage scen["emission_type"] = default_emission_type scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate - scen["em_scen_name"] = str(scen["year"]) + scen["elec_emission_source"] = default_elec_emission_source + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate + scen["shortrun_weighting"] = default_shortrun_weighting elif group_id == "refrigerant_leakage": # Vary leakage, reset others to defaults scen["annual_refrig_leakage_percent"] = leakage_values[idx % len(leakage_values)] + pct_leakage = scen["annual_refrig_leakage_percent"] * 100 + scen["em_scen_name"] = f"{pct_leakage:.0f}% leakage" + scen["year"] = default_year scen["emission_type"] = default_emission_type scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate - pct_leakage = scen["annual_refrig_leakage_percent"] * 100 - scen["em_scen_name"] = f"{pct_leakage:.0f}% leakage" + scen["elec_emission_source"] = default_elec_emission_source + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate + scen["shortrun_weighting"] = default_shortrun_weighting elif group_id == "emission_types": # Set emission type, reset others to defaults scen["emission_type"] = emission_types[idx % len(emission_types)] scen["ng_emission_rate_gCO2e_per_kWh"] = ng_emission_rate_values[ idx % len(ng_emission_rate_values) ] + scen["em_scen_name"] = scen["emission_type"] + scen["year"] = default_year scen["annual_refrig_leakage_percent"] = default_leakage - scen["em_scen_name"] = scen["emission_type"] + scen["elec_emission_source"] = default_elec_emission_source + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate + scen["shortrun_weighting"] = default_shortrun_weighting + elif group_id == "emission_sources": + # Vary source, avg emissions rate, and short-run weighting, reset others to defaults + scen["elec_emission_source"] = elec_emission_source_values[ + idx % len(elec_emission_source_values) + ] + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate_values[ + idx % len(elec_avg_emission_rate_values) + ] + scen["shortrun_weighting"] = shortun_weighting_values[ + idx % len(shortun_weighting_values) + ] + scen["em_scen_name"] = emission_sources_names[idx % len(emission_sources_names)] + + scen["year"] = default_year + scen["annual_refrig_leakage_percent"] = default_leakage + scen["emission_type"] = default_emission_type + scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate updated_scenarios.append(scen) diff --git a/src/config.py b/src/config.py index f9cceae..de1f2f1 100644 --- a/src/config.py +++ b/src/config.py @@ -73,6 +73,7 @@ class EmissionScenarioDefaults(Enum): YEAR: int = 2025 REFRIGERANT_LEAKAGE: float = 0.02 EMISSION_TYPE: str = "Includes pre-combustion" + SHORTRUN_WEIGHTING: float = 0.0 NG_EMISSION_RATE_G_KWH: float = 239.2 NG_EMISSION_RATE_G_KWH_COMBUSTION: float = 181 From 82fe77564765a25a52998432a5d8e2d323f2f7a3 Mon Sep 17 00:00:00 2001 From: urwahah Date: Mon, 7 Sep 2026 16:35:11 -0700 Subject: [PATCH 15/48] expose emission scenario name --- layout/input.py | 1 + src/config.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/layout/input.py b/layout/input.py index 5e5842b..3b3b2b1 100644 --- a/layout/input.py +++ b/layout/input.py @@ -1128,6 +1128,7 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un # Rows to display (property name, label) # Note: em_scen_id is excluded as it's shown in the header row_config = [ + ("em_scen_name", "Scenario"), ("elec_emission_source", "Grid emissions source"), ( "elec_avg_emission_rate_gCO2e_per_kWh", diff --git a/src/config.py b/src/config.py index de1f2f1..709c19c 100644 --- a/src/config.py +++ b/src/config.py @@ -45,6 +45,7 @@ class EmissionTableRows(Enum): """Row configurations for emission table view modes.""" SIMPLE = ( + "em_scen_name", "elec_emission_source", "elec_avg_emission_rate_gCO2e_per_kWh", "grid_scenario", @@ -53,6 +54,7 @@ class EmissionTableRows(Enum): "year", ) ADVANCED = ( + "em_scen_name", "elec_emission_source", "elec_avg_emission_rate_gCO2e_per_kWh", "grid_scenario", From ca3283377e43a355778d549e5b126250e9f89a74 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 09:05:18 -0700 Subject: [PATCH 16/48] fix: change default eq_scenario label --- data/input/equipment_data.JSON | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index 52e803d..dbeb902 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -1253,7 +1253,7 @@ "scenario_groups": [ { "group_id": "default", - "group_name": "Default", + "group_name": "Example Equipment", "scenario_ids": ["eq_scenario_1", "eq_scenario_2", "eq_scenario_3", "eq_scenario_4", "eq_scenario_5"] }, { From 35eebbe1584a76d488ea0c0019b0ceded72850a3 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 09:15:36 -0700 Subject: [PATCH 17/48] fix: disable download button if no results yet --- layout/shell.py | 36 +++++++++++++++++++++++++++--------- pages/emissions_page.py | 9 +++++---- utils/tooltips.py | 4 ++++ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/layout/shell.py b/layout/shell.py index 33baa32..8fc33ad 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -14,6 +14,7 @@ from src.config import DEFAULT_SELECTIONS, LINKS from src.equipment import load_library # adjust if path differs from utils.display_registry import format_emission_scenario_id_short +from utils.tooltips import with_tooltip @lru_cache(maxsize=1) @@ -70,6 +71,7 @@ def build_shell(page_content): # Scenario group selections (persisted across page navigation) dcc.Store(id="equipment-scenario-group-store", storage_type="session", data="default"), dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), + dcc.Store(id="results-ready-store", storage_type="session", data=False), dcc.Download(id="download-data"), ] @@ -178,15 +180,21 @@ def build_navbar_content(): dmc.Stack(page_links, gap="sm"), dmc.Divider(), unit_toggle(), - dmc.Button( - "Download data", - rightSection=DashIconify(icon="material-symbols-light:download", width=18), - variant="outline", - color="blue", - styles={"root": {"borderColor": "var(--mantine-color-gray-3)"}}, - id="download-button", - n_clicks=0, - size="xs", + with_tooltip( + dmc.Button( + "Download data", + rightSection=DashIconify(icon="material-symbols-light:download", width=18), + variant="outline", + color="blue", + styles={"root": {"borderColor": "var(--mantine-color-gray-3)"}}, + id="download-button", + n_clicks=0, + size="xs", + disabled=True, + ), + "results.download_button", + id="download-tooltip", + position="right", ), dmc.Divider(), legend_toggle(), @@ -340,3 +348,13 @@ def update_equipment_number_map(selected_ids): if not selected_ids: return {} return {scen_id: i + 1 for i, scen_id in enumerate(selected_ids)} + + +@callback( + Output("download-button", "disabled"), + Output("download-tooltip", "disabled"), + Input("results-ready-store", "data"), +) +def toggle_download_button(results_ready): + has_results = bool(results_ready) + return not has_results, has_results diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 42c7841..86eb922 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -898,6 +898,7 @@ def run_loads_to_site( @callback( Output("source-energy-store", "children"), Output("notification-container", "sendNotifications", allow_duplicate=True), + Output("results-ready-store", "data"), Input("site-energy-store", "data"), State("metadata-store", "data"), State("selected-emissions-store", "data"), @@ -912,7 +913,7 @@ def run_site_to_source(site_energy_path, metadata_json, selected_emission_ids, s notification = create_warning_notification( "No Emission Scenarios", "Please select at least one emission scenario." ) - return no_update, [notification] + return no_update, [notification], no_update try: logger.info( @@ -946,19 +947,19 @@ def run_site_to_source(site_energy_path, metadata_json, selected_emission_ids, s "Source emissions calculation finished successfully.", ) - return dcc.Store(id="source-energy-store", data=str(source_path)), [success] + return dcc.Store(id="source-energy-store", data=str(source_path)), [success], True except ValueError as e: logger.error(f"Emissions calculation error: {e}") notification = create_error_notification("Calculation Error", str(e)) - return no_update, [notification] + return no_update, [notification], no_update except Exception as e: logger.exception(f"Unexpected emissions error: {e}") notification = create_error_notification( "Unexpected Error", "Emissions calculation failed." ) - return no_update, [notification] + return no_update, [notification], no_update @callback( diff --git a/utils/tooltips.py b/utils/tooltips.py index f0e2933..2c6b1b9 100644 --- a/utils/tooltips.py +++ b/utils/tooltips.py @@ -27,6 +27,10 @@ "loads": { "specify_equipment_button": "Specify equipment configurations for this load scenario.", }, + # --- Results Page --- + "results": { + "download_button": "Run the calculation first to enable the download.", + }, # --- Equipment Page --- "equipment": { "add_eq_scenario": "Create a new equipment configuration based on an existing scenario.", From b6600b338e5500679c8e06e4676619c944a1512b Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 09:24:32 -0700 Subject: [PATCH 18/48] fix: rename eq + em scenario tbl view labels + defaults --- pages/emissions_page.py | 6 +++--- pages/equipment_page.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 86eb922..050739e 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -120,10 +120,10 @@ def layout(): id="emissions-view-mode", data=[ {"label": "Simple", "value": "simple"}, - {"label": "Advanced", "value": "advanced"}, + {"label": "Detailed", "value": "advanced"}, {"label": "Differences", "value": "differences"}, ], - value="simple", + value="differences", size="sm", ), ], @@ -194,7 +194,7 @@ def update_emissions_table(metadata_data, selected_emissions, view_mode, unit_mo return build_emissions_table( scenarios, active_ids=active_ids, - view_mode=view_mode or "simple", + view_mode=view_mode or "differences", unit_mode=unit_mode or "SI", ) diff --git a/pages/equipment_page.py b/pages/equipment_page.py index 160f15a..94422c7 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -111,10 +111,10 @@ def layout(): id="equipment-view-mode", data=[ {"label": "Simple", "value": "simple"}, - {"label": "Advanced", "value": "advanced"}, + {"label": "Detailed", "value": "advanced"}, {"label": "Differences", "value": "differences"}, ], - value="simple", + value="differences", size="sm", ), ], @@ -197,7 +197,7 @@ def update_equipment_table( scenarios, displayed_ids=displayed_ids, active_ids=selected_ids, - view_mode=view_mode or "simple", + view_mode=view_mode or "differences", unit_mode=unit_mode or "SI", ) From fbcee81c871d225aee27a126b098cf4597a45b32 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 11:41:05 -0700 Subject: [PATCH 19/48] fix: autocalculate results v1 --- data/input/building_metadata.csv | 748 +++++++++++++++---------------- layout/input.py | 4 +- layout/shell.py | 1 + pages/emissions_page.py | 10 +- pages/loads_page.py | 38 +- pages/results_page.py | 133 +++++- 6 files changed, 545 insertions(+), 389 deletions(-) diff --git a/data/input/building_metadata.csv b/data/input/building_metadata.csv index 2426e12..8bc963a 100644 --- a/data/input/building_metadata.csv +++ b/data/input/building_metadata.csv @@ -1,374 +1,374 @@ -building_id,load_type,ashrae_climate_zone,vintage,building_type,location,area_sqm,load_source_ref,annual_heating_cooling_ratio,chw_annual_load,chw_cooling_hour_ratio,chw_cooling_hours,chw_data_coverage,chw_max_load,chw_max_load_gt0,chw_max_load_per_area,chw_mean_load,chw_mean_load_gt0,chw_median_load,chw_median_load_gt0,chw_min_load,chw_min_load_gt0,chw_pct_below_10pct_max,chw_pct_below_20pct_max,chw_pct_below_30pct_max,chw_pct_below_40pct_max,chw_pct_below_50pct_max,chw_pct_below_60pct_max,chw_pct_below_70pct_max,chw_pct_below_80pct_max,chw_pct_below_90pct_max,chw_q25_load,chw_q75_load,chw_valid_hours,heat_recovery_heating_fraction,hhw_annual_load,hhw_data_coverage,hhw_heating_hour_ratio,hhw_heating_hours,hhw_max_load,hhw_max_load_gt0,hhw_max_load_per_area,hhw_mean_load,hhw_mean_load_gt0,hhw_median_load,hhw_median_load_gt0,hhw_min_load,hhw_min_load_gt0,hhw_pct_below_10pct_max,hhw_pct_below_20pct_max,hhw_pct_below_30pct_max,hhw_pct_below_40pct_max,hhw_pct_below_50pct_max,hhw_pct_below_60pct_max,hhw_pct_below_70pct_max,hhw_pct_below_80pct_max,hhw_pct_below_90pct_max,hhw_q25_load,hhw_q75_load,hhw_valid_hours,max_heating_load_after_heat_recovery,max_temp,mean_temp,median_temp,min_temp,q10_temp,q20_temp,q25_temp,q30_temp,q40_temp,q50_temp,q60_temp,q70_temp,q75_temp,q80_temp,q90_temp,ratio_of_peak_heating_and_cooling,simultaneous_heating_and_cooling_hour_ratio,simultaneous_heating_and_cooling_hours -1,simulated,5B,2022.0,Hospital,Denver,22000,DOE,0.49,2436511556.72,100.0,8760.0,100.0,1209329.17,1209329.17,53.9,278140.59,278140.59,169579.62,169579.62,454.13,454.13,43.92,59.43,71.43,78.68,84.84,89.58,92.16,95.8,99.0,52861.25,416217.84,8760.0,0.59,1197558184.73,100.0,100.0,8760.0,487444.06,487444.06,21.73,136707.56,136707.56,118922.73,118922.73,27237.47,27237.47,1.13,32.83,64.63,82.15,92.84,97.26,98.77,99.49,99.9,89336.27,172660.0,8760.0,486455.54,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.4,100.0,8760.0 -2,simulated,8,2022.0,HotelLarge,Fairbanks,11000,DOE,2.92,252608598.3,64.28,5631.0,100.0,357288.66,357288.66,31.49,28836.6,44860.34,1867.93,18065.68,0.0,41.76,75.97,86.35,90.74,93.9,96.16,97.92,99.18,99.53,99.89,0.0,33594.44,8760.0,0.02,736879759.49,100.0,82.09,7191.0,728037.11,728037.11,64.17,84118.69,102472.5,38541.71,56775.5,0.0,0.0,65.98,85.24,91.06,91.84,92.31,93.38,97.15,99.33,99.86,435.85,98757.51,8760.0,728037.11,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,2.04,46.38,4063.0 -3,simulated,4C,2004.0,HotelLarge,Seattle,11000,DOE,0.83,699874167.35,68.55,6005.0,100.0,521680.76,521680.76,45.98,79894.31,116548.57,14610.75,63974.42,0.0,228.0,63.17,72.65,79.84,85.02,89.14,91.97,95.29,97.89,99.37,0.0,121611.9,8760.0,0.31,581930174.0,100.0,100.0,8760.0,185574.8,185574.8,16.36,66430.39,66430.39,62184.5,62184.5,6.52,6.52,8.11,20.07,42.13,61.71,76.32,87.69,96.14,99.55,99.93,41870.55,91054.32,8760.0,185574.8,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.36,68.55,6005.0 -4,simulated,6B,2004.0,HotelLarge,Great Falls,11000,DOE,2.35,749717140.92,59.98,5254.0,100.0,695641.56,695641.56,61.32,85584.15,142694.55,8623.07,69514.09,0.0,727.73,70.02,77.5,83.14,87.8,91.44,94.82,96.88,98.57,99.71,0.0,114782.35,8760.0,0.06,1759013542.31,100.0,99.9,8751.0,893740.0,893740.0,78.78,200800.63,201007.15,136169.12,136408.53,0.0,0.04,43.79,55.7,69.45,80.48,86.99,90.48,94.12,97.45,98.28,28751.8,310492.43,8760.0,893740.0,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.28,59.87,5245.0 -5,simulated,5C,2022.0,OfficeLarge,Port Angeles,46000,DOE,0.87,351368786.4,28.18,2469.0,100.0,1285690.53,1285690.53,27.76,40110.59,142312.19,0.0,26698.08,0.0,0.02,91.18,94.33,96.4,97.96,98.53,99.01,99.3,99.81,99.93,0.0,498.55,8760.0,0.02,306453494.93,100.0,37.51,3286.0,603812.53,603812.53,13.04,34983.28,93260.35,0.0,65173.26,0.0,0.0,80.49,88.65,93.31,96.43,98.12,99.29,99.75,99.92,99.97,0.0,21256.6,8760.0,603812.53,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.47,11.93,1045.0 -6,simulated,3B,2022.0,Hospital,San Diego,22000,DOE,0.25,3931884826.43,100.0,8760.0,100.0,1455306.82,1455306.82,64.86,448845.3,448845.3,322078.07,322078.07,50584.74,50584.74,10.23,43.66,63.76,76.54,82.75,86.21,88.81,91.13,96.16,196870.92,555212.3,8760.0,0.96,981758267.08,100.0,100.0,8760.0,293384.31,293384.31,13.08,112072.86,112072.86,112065.48,112065.48,14824.43,14824.43,0.13,4.45,26.62,56.18,85.45,96.21,99.06,99.83,99.98,86103.94,134153.26,8760.0,225937.99,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.2,100.0,8760.0 -7,simulated,4B,2004.0,Hospital,Albuquerque,22000,DOE,0.39,4869589634.27,100.0,8760.0,100.0,2304083.92,2304083.92,102.7,555889.23,555889.23,461709.42,461709.42,37866.75,37866.75,22.18,49.97,63.22,81.97,92.39,98.78,99.85,99.93,99.98,245413.62,795916.26,8760.0,0.89,1899324135.65,100.0,100.0,8760.0,446091.17,446091.17,19.88,216817.82,216817.82,207446.04,207446.04,26462.9,26462.9,0.15,2.47,12.79,33.94,59.1,75.94,86.4,94.82,98.9,161828.77,264392.29,8760.0,379128.97,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.19,100.0,8760.0 -8,simulated,1A,2004.0,HotelLarge,Miami,11000,DOE,0.03,4963636981.33,99.25,8694.0,100.0,882074.25,882074.25,77.75,566625.23,570926.73,615326.56,616489.45,0.0,1327.34,3.95,7.16,10.48,14.53,19.93,31.5,50.58,73.81,95.21,487590.58,710206.88,8760.0,0.94,169302175.54,100.0,90.68,7944.0,121531.94,121531.94,10.71,19326.73,21311.96,15461.71,17058.7,0.0,0.25,39.51,71.5,85.17,92.63,96.61,98.72,99.73,99.91,99.97,7091.98,26915.77,8760.0,121531.94,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.14,89.93,7878.0 -9,simulated,2A,2022.0,OutPatientHealthCare,Tampa,4000,DOE,0.09,1361849053.07,100.0,8760.0,100.0,445742.22,445742.22,117.18,155462.22,155462.22,125080.11,125080.11,40.51,40.51,14.26,29.05,54.41,69.46,73.98,79.67,86.46,93.84,99.34,79359.3,233908.06,8760.0,0.98,122399119.03,100.0,100.0,8760.0,99823.43,99823.43,26.24,13972.5,13972.5,11066.68,11066.68,3472.24,3472.24,43.42,80.42,91.83,96.84,98.96,99.58,99.83,99.94,99.97,6716.17,17543.47,8760.0,97849.88,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.22,100.0,8760.0 -10,simulated,5C,2022.0,HotelLarge,Port Angeles,11000,DOE,1.01,202113402.4,75.67,6629.0,100.0,347144.22,347144.22,30.6,23072.31,30489.27,5200.21,11093.21,0.0,102.12,79.78,89.33,94.13,96.92,98.54,99.37,99.67,99.86,99.97,304.25,25213.94,8760.0,0.09,204922991.14,100.0,84.6,7411.0,119088.24,119088.24,10.5,23393.04,27651.19,12432.83,20265.25,0.0,0.0,49.59,61.16,71.11,79.05,86.15,91.99,96.83,99.45,99.93,262.18,41643.18,8760.0,118834.29,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.34,60.27,5280.0 -11,simulated,5C,2022.0,OutPatientHealthCare,Port Angeles,4000,DOE,0.43,319045645.95,99.35,8703.0,100.0,225255.73,225255.73,59.22,36420.74,36659.27,21603.3,21768.51,0.0,15.66,52.39,74.68,85.61,91.15,94.14,96.12,97.49,99.22,99.89,13987.72,45554.49,8760.0,0.82,136024112.81,100.0,100.0,8760.0,116844.97,116844.97,30.72,15527.87,15527.87,11030.02,11030.02,3696.05,3696.05,53.04,82.01,91.84,96.48,98.32,99.17,99.71,99.94,99.99,7091.76,19225.37,8760.0,116844.97,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.52,99.35,8703.0 -12,simulated,7,2022.0,OfficeLarge,International Falls,46000,DOE,0.64,1016753503.17,44.83,3927.0,100.0,3745411.78,3745411.78,80.86,116067.75,258913.55,0.0,22224.51,0.0,0.01,88.85,94.1,96.74,99.3,99.87,99.92,99.94,99.95,99.98,0.0,10370.94,8760.0,0.0,646204771.69,100.0,46.18,4045.0,2133282.91,2133282.91,46.05,73767.67,159753.96,0.0,55129.26,0.0,0.01,89.81,95.78,97.43,98.18,98.52,99.26,99.66,99.89,99.94,0.0,40999.72,8760.0,2133282.91,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.57,17.57,1539.0 -13,simulated,4A,2004.0,HotelLarge,New York,11000,DOE,0.33,1790748738.49,71.1,6228.0,100.0,833357.52,833357.52,73.45,204423.37,287531.91,47990.98,250887.79,0.0,502.86,53.42,59.62,64.42,69.22,74.43,80.62,88.08,95.14,98.64,0.0,423612.75,8760.0,0.29,589758706.99,100.0,99.69,8733.0,283057.43,283057.43,24.95,67324.05,67532.2,55574.35,55819.94,0.0,3.17,22.28,50.78,67.4,82.11,91.94,97.26,98.96,99.58,99.89,30616.03,98890.14,8760.0,283057.43,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.34,70.79,6201.0 -14,simulated,5B,2022.0,OutPatientHealthCare,Denver,4000,DOE,0.32,452394658.98,95.66,8380.0,100.0,264587.79,264587.79,69.55,51643.23,53985.04,25594.71,28584.57,0.0,10.3,50.56,66.61,78.72,84.11,87.82,90.98,94.05,97.51,99.68,11369.31,68508.04,8760.0,0.58,143256486.44,100.0,100.0,8760.0,202992.78,202992.78,53.36,16353.48,16353.48,9377.48,9377.48,2579.66,2579.66,76.77,91.21,96.44,98.32,99.14,99.63,99.85,99.93,99.95,5635.08,18988.16,8760.0,202992.78,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.77,95.66,8380.0 -15,simulated,4C,2004.0,OutPatientHealthCare,Seattle,4000,DOE,0.7,607612669.22,99.95,8756.0,100.0,339358.15,339358.15,89.21,69362.18,69393.86,41222.73,41267.02,0.0,30.78,42.43,57.63,74.7,87.39,93.26,96.42,98.2,99.21,99.66,25157.76,102368.82,8760.0,0.7,425249699.57,100.0,100.0,8760.0,191543.73,191543.73,50.35,48544.49,48544.49,43621.53,43621.53,8381.12,8381.12,8.53,41.31,68.7,86.23,94.67,98.29,99.33,99.79,99.94,29340.92,63184.38,8760.0,191452.47,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.56,99.95,8756.0 -16,simulated,5C,2022.0,Hospital,Port Angeles,22000,DOE,1.03,1501479883.15,100.0,8760.0,100.0,1024824.22,1024824.22,45.68,171401.81,171401.81,114942.33,114942.33,19633.13,19633.13,43.76,75.34,88.12,92.13,94.61,95.83,97.72,99.24,99.84,72260.07,203444.35,8760.0,0.71,1543704330.43,100.0,100.0,8760.0,319749.76,319749.76,14.25,176221.96,176221.96,174185.17,174185.17,71150.76,71150.76,0.0,0.0,3.3,12.59,37.45,64.36,84.82,96.93,99.82,146414.61,206864.18,8760.0,285158.84,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.31,100.0,8760.0 -17,simulated,2B,2004.0,OutPatientHealthCare,Tucson,4000,DOE,0.21,1278112396.48,100.0,8760.0,100.0,436379.8,436379.8,114.72,145903.24,145903.24,130915.62,130915.62,6991.15,6991.15,16.77,29.51,49.99,70.39,79.24,85.19,91.04,95.89,99.42,77286.47,192338.47,8760.0,0.9,269755909.53,100.0,100.0,8760.0,158950.42,158950.42,41.78,30794.05,30794.05,22330.98,22330.98,4098.83,4098.83,26.46,63.4,82.9,91.04,95.41,98.08,99.2,99.7,99.94,15579.47,40038.99,8760.0,134010.67,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.36,100.0,8760.0 -18,simulated,3A,2004.0,OutPatientHealthCare,Atlanta,4000,DOE,0.25,1280027171.71,99.3,8699.0,100.0,481263.98,481263.98,126.51,146121.82,147146.47,119486.41,120118.55,0.0,13.54,14.49,39.74,60.76,75.89,83.2,87.45,91.11,94.73,98.4,67393.96,188972.3,8760.0,0.84,325360576.9,100.0,100.0,8760.0,270108.89,270108.89,71.01,37141.62,37141.62,29879.73,29879.73,7183.73,7183.73,44.86,80.41,93.54,97.75,99.16,99.67,99.82,99.92,99.97,18738.8,47609.37,8760.0,270108.89,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.56,99.3,8699.0 -19,simulated,6B,2022.0,OutPatientHealthCare,Great Falls,4000,DOE,0.57,360757769.34,89.83,7869.0,100.0,280848.98,280848.98,73.83,41182.39,45845.44,19435.93,22466.11,0.0,8.57,60.7,75.71,85.62,89.69,92.47,95.08,97.57,98.73,99.73,8998.9,54792.09,8760.0,0.41,205380180.03,100.0,100.0,8760.0,238514.95,238514.95,62.7,23445.23,23445.23,11941.94,11941.94,2598.65,2598.65,73.31,87.56,93.12,95.98,97.56,98.44,98.98,99.43,99.63,6499.25,25406.98,8760.0,238514.95,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,0.85,89.83,7869.0 -20,simulated,7,2022.0,OutPatientHealthCare,International Falls,4000,DOE,0.98,346602093.43,74.34,6512.0,100.0,365327.14,365327.14,96.04,39566.45,53225.14,15366.14,26193.24,0.0,11.27,68.74,82.13,88.69,91.89,95.58,97.6,98.8,99.62,99.91,0.0,52051.9,8760.0,0.2,338493106.16,100.0,100.0,8760.0,264106.23,264106.23,69.43,38640.77,38640.77,17462.94,17462.94,3273.37,3273.37,60.27,75.11,85.13,90.81,94.01,96.14,97.68,98.36,99.06,7918.22,52525.86,8760.0,264106.23,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.72,74.34,6512.0 -21,simulated,3B,2004.0,Hospital,El Paso,22000,DOE,0.28,6420134657.62,100.0,8760.0,100.0,3187894.39,3187894.39,142.09,732892.08,732892.08,747831.44,747831.44,88781.81,88781.81,21.08,46.2,67.88,89.73,98.94,99.39,99.69,99.86,99.97,345984.67,1047452.97,8760.0,0.97,1824798830.79,100.0,100.0,8760.0,426654.79,426654.79,19.02,208310.37,208310.37,204176.73,204176.73,16244.09,16244.09,0.09,1.07,9.27,30.13,56.51,78.29,89.6,97.0,99.57,161344.24,246569.66,8760.0,296411.59,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.13,100.0,8760.0 -22,simulated,8,2004.0,Hospital,Fairbanks,22000,DOE,1.68,2429164027.96,68.6,6009.0,100.0,1251056.63,1251056.63,55.76,277301.83,404254.29,153259.18,312817.65,0.0,0.13,46.75,58.85,71.31,77.16,78.26,87.03,93.94,97.66,99.51,0.0,417397.83,8760.0,0.31,4092122481.35,100.0,100.0,8760.0,1355884.98,1355884.98,60.43,467137.27,467137.27,362375.6,362375.6,151694.27,151694.27,0.0,26.51,54.99,67.69,77.4,86.27,94.19,98.76,99.67,266874.43,640348.34,8760.0,1355884.98,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.08,68.6,6009.0 -23,simulated,3A,2022.0,HotelLarge,Atlanta,11000,DOE,0.06,1338907252.1,91.44,8010.0,100.0,539583.07,539583.07,47.56,152843.29,167154.46,98624.04,131508.46,0.0,80.78,43.21,51.28,57.8,64.37,70.62,80.79,90.59,95.87,99.16,8125.27,296468.77,8760.0,0.14,85585486.4,100.0,54.82,4802.0,117533.9,117533.9,10.36,9770.03,17822.88,68.64,3601.91,0.0,0.0,79.05,83.4,88.01,91.78,94.71,97.1,98.9,99.62,99.94,0.0,5163.1,8760.0,116714.59,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.22,46.27,4053.0 -24,simulated,1A,2022.0,OfficeLarge,Miami,46000,DOE,0.0,5493620546.09,89.79,7866.0,100.0,2226735.16,2226735.16,48.07,627125.63,698400.78,513636.29,591739.08,0.0,1365.35,31.99,44.7,58.69,67.28,75.74,82.02,96.48,99.59,99.86,40672.09,1088359.6,8760.0,0.94,669632.19,100.0,1.42,124.0,83967.64,83967.64,1.81,76.44,5400.26,0.0,579.35,0.0,0.2,99.78,99.85,99.9,99.94,99.95,99.97,99.99,99.99,99.99,0.0,0.0,8760.0,15853.65,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.04,1.42,124.0 -25,simulated,3B,2022.0,HotelLarge,San Diego,11000,DOE,0.04,800013370.4,98.28,8609.0,100.0,421762.07,421762.07,37.18,91325.73,92927.56,63791.14,65587.8,0.0,183.99,37.68,59.46,72.09,81.58,88.84,93.7,96.94,98.93,99.78,23647.39,139587.62,8760.0,0.47,29089967.59,100.0,69.21,6063.0,94167.33,94167.33,8.3,3320.77,4797.95,254.57,1294.11,0.0,0.02,92.59,95.08,96.77,98.16,98.93,99.38,99.67,99.82,99.94,0.0,2549.53,8760.0,93507.55,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.22,67.49,5912.0 -26,simulated,8,2004.0,OutPatientHealthCare,Fairbanks,4000,DOE,2.44,344536891.68,60.0,5256.0,100.0,270242.45,270242.45,71.04,39330.7,65551.16,10955.56,36824.43,0.0,14.59,63.24,74.25,78.14,85.48,90.92,94.49,97.16,98.64,99.71,0.0,62428.63,8760.0,0.17,839828172.44,100.0,100.0,8760.0,400318.99,400318.99,105.24,95870.8,95870.8,66094.59,66094.59,8652.92,8652.92,29.34,57.33,74.14,82.88,87.32,90.98,94.33,96.97,98.53,36200.01,122654.96,8760.0,400318.99,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.48,60.0,5256.0 -27,simulated,5A,2004.0,HotelLarge,Chicago,11000,DOE,0.44,1615158189.0,90.07,7890.0,100.0,873118.73,873118.73,76.96,184378.79,204709.53,30850.19,70384.08,0.0,269.85,56.62,62.81,67.98,72.57,78.42,86.95,94.41,98.57,99.74,6475.23,386079.54,8760.0,0.27,712535875.97,100.0,99.66,8730.0,799443.13,799443.13,70.46,81339.71,81619.23,61063.76,61324.83,0.0,1.17,62.18,88.49,95.88,98.49,99.44,99.63,99.63,99.69,99.74,31305.8,105753.74,8760.0,799443.13,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.92,89.73,7860.0 -28,simulated,2A,2022.0,Hospital,Tampa,22000,DOE,0.16,7033587609.72,100.0,8760.0,100.0,1854822.03,1854822.03,82.67,802920.96,802920.96,823452.11,823452.11,28513.31,28513.31,11.7,22.32,30.26,39.39,63.11,75.07,83.56,91.58,99.24,434934.66,1109537.37,8760.0,0.96,1125189955.32,100.0,100.0,8760.0,324045.35,324045.35,14.44,128446.34,128446.34,129920.07,129920.07,59764.16,59764.16,0.0,0.43,18.93,49.61,86.21,96.62,99.41,99.9,99.99,103983.7,148795.59,8760.0,284605.62,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.17,100.0,8760.0 -29,simulated,6A,2004.0,OfficeLarge,Rochester,46000,DOE,1.04,2574363281.52,45.53,3988.0,100.0,2851372.82,2851372.82,61.56,293877.09,645527.4,0.0,496820.31,0.0,0.0,69.19,79.75,86.47,90.78,93.49,96.03,98.9,99.6,99.9,0.0,438886.17,8760.0,0.01,2665825529.44,100.0,61.52,5389.0,3278996.41,3278996.41,70.79,304317.98,494679.07,22474.34,277638.91,0.0,2.81,71.6,81.69,89.13,94.04,96.58,98.32,99.32,99.79,99.9,0.0,411766.85,8760.0,3278996.41,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.15,14.27,1250.0 -30,simulated,3C,2022.0,HotelLarge,San Jose,11000,DOE,0.13,588423217.27,92.43,8097.0,100.0,431432.5,431432.5,38.03,67171.6,72671.76,35950.42,42609.04,0.0,173.95,54.1,72.09,81.32,88.52,93.76,96.75,98.53,99.53,99.91,11651.15,97041.5,8760.0,0.24,74810531.7,100.0,75.62,6624.0,126598.96,126598.96,11.16,8540.02,11293.86,781.18,2308.91,0.0,0.0,85.25,89.6,92.67,94.47,95.92,97.2,98.08,98.81,99.52,0.02,5392.84,8760.0,126598.96,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.29,68.05,5961.0 -31,simulated,5A,2022.0,HotelLarge,Chicago,11000,DOE,0.22,849021947.75,81.54,7143.0,100.0,571984.55,571984.55,50.42,96920.31,118860.7,12809.98,36787.53,0.0,101.0,62.45,68.57,73.45,78.84,85.25,92.69,97.18,99.29,99.81,1808.03,189674.42,8760.0,0.07,188985456.71,100.0,66.0,5782.0,519305.59,519305.59,45.77,21573.68,32685.14,1437.97,21674.71,0.0,0.02,84.1,97.65,99.34,99.63,99.65,99.7,99.7,99.76,99.78,0.0,34990.95,8760.0,519305.59,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.91,47.59,4169.0 -32,simulated,5C,2004.0,HotelLarge,Port Angeles,11000,DOE,1.41,441141683.83,63.53,5565.0,100.0,552495.92,552495.92,48.7,50358.64,79270.74,7343.36,27905.54,0.0,148.02,74.86,82.84,88.57,92.69,95.76,97.57,99.04,99.87,99.99,0.0,56160.76,8760.0,0.24,620949851.36,100.0,100.0,8760.0,162566.93,162566.93,14.33,70884.69,70884.69,68220.71,68220.71,1464.33,1464.33,4.91,11.72,26.85,46.72,62.13,76.08,88.52,96.97,99.67,47367.84,95791.49,8760.0,162566.93,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.29,63.53,5565.0 -33,simulated,1A,2022.0,HotelLarge,Miami,11000,DOE,0.0,2854087295.08,100.0,8760.0,100.0,591831.33,591831.33,52.17,325809.05,325809.05,347448.14,347448.14,5063.07,5063.07,2.55,7.44,14.22,21.22,32.95,53.76,78.82,90.84,97.93,259867.71,402074.34,8760.0,1.0,323480.03,100.0,15.19,1331.0,5963.0,5963.0,0.53,36.93,243.04,0.0,83.7,0.0,0.02,98.42,99.42,99.78,99.86,99.92,99.95,99.97,99.97,99.98,0.0,0.0,8760.0,-1347.6,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.01,15.19,1331.0 -34,simulated,3C,2004.0,OfficeLarge,San Jose,46000,DOE,0.18,2426393146.56,76.99,6744.0,100.0,2243807.93,2243807.93,48.44,276985.52,359785.46,63513.77,185391.81,0.0,0.01,64.29,76.37,83.74,89.59,93.16,97.67,99.0,99.6,99.94,0.42,417413.46,8760.0,0.24,433077069.37,100.0,43.52,3812.0,1390243.57,1390243.57,30.01,49438.02,113608.88,0.0,57417.95,0.0,0.79,86.64,95.07,98.33,99.34,99.69,99.86,99.97,99.98,99.98,0.0,37433.71,8760.0,1390243.57,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.62,31.54,2763.0 -35,simulated,3C,2004.0,OfficeLarge,San Francisco,46000,DOE,0.31,1421695827.21,73.03,6397.0,100.0,1587960.4,1587960.4,34.28,162294.04,222244.15,14539.21,98490.03,0.0,0.01,69.7,81.08,87.91,92.82,95.4,97.18,98.28,99.11,99.85,0.0,223886.44,8760.0,0.24,442024535.43,100.0,46.77,4097.0,1064390.0,1064390.0,22.98,50459.42,107889.81,0.0,62462.41,0.0,1.62,82.37,91.39,97.2,99.13,99.66,99.86,99.92,99.97,99.99,0.0,51696.14,8760.0,1064390.0,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.67,33.73,2955.0 -36,simulated,2A,2022.0,OfficeLarge,Houston,46000,DOE,0.01,3806479471.36,69.53,6091.0,100.0,2314362.25,2314362.25,49.96,434529.62,624935.06,142978.84,494600.61,0.0,0.03,52.66,63.45,72.56,78.22,83.4,89.6,99.52,99.91,99.98,0.0,771419.64,8760.0,0.06,53533966.88,100.0,14.01,1227.0,673636.3,673636.3,14.54,6111.18,43629.96,0.0,12516.39,0.0,0.02,97.09,98.53,99.32,99.77,99.9,99.93,99.95,99.98,99.99,0.0,0.0,8760.0,673636.3,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.29,6.79,595.0 -37,simulated,3C,2022.0,Hospital,San Jose,22000,DOE,0.36,3289212968.83,100.0,8760.0,100.0,1408960.88,1408960.88,62.8,375480.93,375480.93,264178.56,264178.56,44478.46,44478.46,15.51,53.63,71.52,81.37,87.26,90.08,92.29,94.08,97.18,182896.55,463447.45,8760.0,0.91,1198857141.48,100.0,100.0,8760.0,336327.84,336327.84,14.99,136855.84,136855.84,134075.78,134075.78,30552.81,30552.81,0.05,1.96,19.47,50.64,81.2,93.3,97.13,99.02,99.9,109233.95,157419.89,8760.0,276034.62,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.24,100.0,8760.0 -38,simulated,5A,2004.0,OfficeLarge,Buffalo,46000,DOE,0.76,2467030572.0,48.37,4237.0,100.0,2498062.98,2498062.98,53.93,281624.49,582258.81,0.0,469978.51,0.0,0.0,66.3,77.17,85.49,90.1,93.31,95.66,98.87,99.67,99.85,0.0,451594.67,8760.0,0.01,1873297877.84,100.0,56.15,4919.0,2288704.76,2288704.76,49.41,213846.79,380829.01,7325.24,209453.57,0.0,1.51,73.14,82.05,87.88,92.01,95.74,98.06,99.29,99.77,99.93,0.0,266784.65,8760.0,2288704.76,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.92,14.54,1274.0 -39,simulated,2A,2004.0,OfficeLarge,Houston,46000,DOE,0.06,8571800920.3,98.49,8628.0,100.0,3351492.25,3351492.25,72.35,978516.09,993486.43,891930.23,908847.18,0.0,0.26,34.2,43.64,53.78,64.62,74.73,86.59,93.71,97.74,99.61,93506.17,1683614.47,8760.0,0.26,472948751.32,100.0,31.3,2742.0,2066529.56,2066529.56,44.61,53989.58,172483.13,0.0,64337.48,0.0,0.29,91.37,95.68,98.01,99.03,99.55,99.81,99.91,99.95,99.98,0.0,5079.47,8760.0,2066449.84,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.62,29.81,2611.0 -40,simulated,1A,2004.0,OfficeLarge,Miami,46000,DOE,0.0,11848239201.05,100.0,8760.0,100.0,3061699.57,3061699.57,66.1,1352538.72,1352538.72,1393692.09,1393692.09,901.22,901.22,11.74,19.16,29.11,39.25,55.76,67.87,88.06,94.61,98.49,782175.04,1951993.45,8760.0,0.81,38715347.11,100.0,11.6,1016.0,498380.36,498380.36,10.76,4419.56,38105.66,0.0,10546.24,0.0,0.78,97.24,98.65,99.22,99.46,99.74,99.89,99.93,99.95,99.99,0.0,0.0,8760.0,487176.07,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.16,11.6,1016.0 -41,simulated,2A,2022.0,OutPatientHealthCare,Houston,4000,DOE,0.11,1222099992.63,99.98,8758.0,100.0,428969.55,428969.55,112.77,139509.13,139540.99,113730.99,113748.73,0.0,36.06,19.51,34.57,58.03,72.59,77.71,82.67,87.97,92.53,98.45,62370.07,189564.74,8760.0,0.93,134000620.21,100.0,100.0,8760.0,111253.0,111253.0,29.25,15296.87,15296.87,11696.98,11696.98,3422.13,3422.13,47.2,80.51,92.15,96.66,98.61,99.41,99.75,99.89,99.95,7017.19,19096.32,8760.0,108506.3,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.26,99.98,8758.0 -42,simulated,4B,2004.0,HotelLarge,Albuquerque,11000,DOE,0.53,1439196112.2,81.19,7112.0,100.0,686574.85,686574.85,60.52,164291.79,202361.66,80493.1,155887.62,0.0,732.69,47.66,57.35,64.94,72.21,79.43,86.23,92.02,96.99,99.58,8322.72,301452.68,8760.0,0.15,764118919.15,100.0,99.24,8693.0,398956.92,398956.92,35.16,87228.19,87900.49,24751.29,25254.46,0.0,0.02,57.1,64.08,69.61,75.07,80.72,86.43,91.36,95.47,98.68,7618.61,158849.8,8760.0,398956.92,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.58,80.42,7045.0 -43,simulated,3A,2004.0,HotelLarge,Sacramento,11000,DOE,0.28,1482033419.97,81.88,7173.0,100.0,753352.46,753352.46,66.4,169181.9,206612.77,95228.17,164777.81,0.0,889.05,46.75,57.24,66.18,72.73,81.62,90.57,96.59,99.13,99.86,8981.21,323719.96,8760.0,0.49,421168865.57,100.0,99.79,8742.0,130186.09,130186.09,11.47,48078.64,48177.63,42768.47,42863.82,0.0,0.01,12.12,26.46,45.31,59.83,71.55,80.31,88.95,95.1,98.49,25107.87,69850.2,8760.0,130186.09,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.17,81.68,7155.0 -44,simulated,3A,2004.0,Hospital,Atlanta,22000,DOE,0.27,8487501493.63,99.99,8759.0,100.0,2904596.57,2904596.57,129.46,968892.86,969003.48,964176.12,964202.97,0.0,17713.25,5.75,23.3,41.56,68.52,84.03,94.04,98.39,99.33,99.84,603677.24,1269253.31,8760.0,0.96,2276951814.22,100.0,100.0,8760.0,641141.51,641141.51,28.58,259926.01,259926.01,251633.47,251633.47,53350.56,53350.56,0.05,1.35,16.75,53.52,82.21,94.25,97.99,99.68,99.94,210038.85,299138.7,8760.0,588189.59,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.22,99.99,8759.0 -45,simulated,5A,2022.0,Hospital,Buffalo,22000,DOE,0.65,2580581941.23,100.0,8760.0,100.0,1488990.76,1488990.76,66.37,294586.98,294586.98,146160.8,146160.8,441.66,441.66,50.18,65.49,75.88,82.65,87.92,92.04,94.73,96.85,99.18,54846.57,429273.75,8760.0,0.55,1664863502.44,100.0,100.0,8760.0,516546.73,516546.73,23.02,190052.91,190052.91,169659.77,169659.77,66969.42,66969.42,0.0,8.09,42.59,63.48,79.28,91.78,97.84,99.59,99.95,131022.02,242684.91,8760.0,515756.7,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.35,100.0,8760.0 -46,simulated,3A,2022.0,OutPatientHealthCare,Atlanta,4000,DOE,0.14,829862985.74,99.29,8698.0,100.0,374386.55,374386.55,98.42,94733.22,95408.48,69549.21,70230.45,0.0,13.92,34.68,52.79,71.23,79.17,84.21,88.58,91.56,94.6,97.98,23460.32,125630.25,8760.0,0.78,118315751.98,100.0,100.0,8760.0,172034.46,172034.46,45.22,13506.36,13506.36,8596.74,8596.74,3149.76,3149.76,78.65,93.11,97.15,98.68,99.39,99.73,99.81,99.92,99.97,5690.58,15087.09,8760.0,172034.46,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.46,99.29,8698.0 -47,simulated,8,2004.0,OfficeLarge,Fairbanks,46000,DOE,3.33,1202792725.79,30.21,2646.0,100.0,1453006.39,1453006.39,31.37,137305.11,454570.19,0.0,452651.3,0.0,0.01,79.12,80.55,84.18,88.76,92.85,95.88,97.48,98.62,99.68,0.0,3422.34,8760.0,0.0,4008388792.38,100.0,67.89,5947.0,3172912.98,3172912.98,68.5,457578.63,674018.63,85491.43,320245.07,0.0,2.72,65.94,73.76,79.02,84.21,89.2,93.69,97.48,99.28,99.91,0.0,704379.88,8760.0,3172912.98,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,2.18,9.2,806.0 -48,simulated,3B,2022.0,OutPatientHealthCare,El Paso,4000,DOE,0.12,751680751.67,99.97,8757.0,100.0,319627.66,319627.66,84.02,85808.3,85837.7,65301.27,65325.91,0.0,55.96,30.57,49.04,69.81,77.25,82.71,86.96,90.87,95.34,98.95,23076.07,115657.07,8760.0,0.91,89714416.71,100.0,100.0,8760.0,108589.27,108589.27,28.55,10241.37,10241.37,7034.06,7034.06,1854.11,1854.11,71.53,91.46,96.39,98.31,99.17,99.6,99.76,99.9,99.95,4845.88,11718.34,8760.0,106923.82,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.34,99.97,8757.0 -49,simulated,4B,2004.0,OfficeLarge,Albuquerque,46000,DOE,0.18,2928576199.86,61.11,5353.0,100.0,2082007.66,2082007.66,44.95,334312.35,547090.64,37999.94,414604.36,0.0,0.0,60.59,69.5,77.12,83.41,87.77,91.06,96.61,98.8,99.77,0.0,563436.4,8760.0,0.03,538876043.17,100.0,43.13,3778.0,1381840.49,1381840.49,29.83,61515.53,142635.27,0.0,49463.79,0.0,2.15,86.26,91.38,95.4,97.83,98.87,99.5,99.83,99.92,99.97,0.0,27121.85,8760.0,1381840.49,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.66,15.62,1368.0 -50,simulated,3B,2004.0,HotelLarge,San Diego,11000,DOE,0.25,1860346568.43,90.68,7944.0,100.0,846994.22,846994.22,74.66,212368.33,234182.6,175136.86,198710.39,0.0,361.97,33.13,48.74,65.09,75.48,85.23,91.14,95.46,98.07,99.5,46222.7,334662.28,8760.0,0.58,461448480.23,100.0,100.0,8760.0,298189.55,298189.55,26.28,52676.77,52676.77,40998.73,40998.73,0.14,0.14,27.05,74.33,87.71,92.17,94.6,96.71,98.32,99.33,99.76,28617.56,60413.8,8760.0,298189.55,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.35,90.68,7944.0 -51,simulated,4B,2004.0,OutPatientHealthCare,Albuquerque,4000,DOE,0.38,833651813.27,99.86,8748.0,100.0,355892.99,355892.99,93.56,95165.73,95296.27,83247.71,83444.59,0.0,27.03,36.45,46.12,61.62,76.95,83.88,88.8,93.22,96.68,99.28,24357.54,136675.19,8760.0,0.69,319699861.47,100.0,100.0,8760.0,194862.9,194862.9,51.23,36495.42,36495.42,29971.39,29971.39,6594.41,6594.41,28.89,64.46,83.86,92.67,96.69,98.66,99.53,99.83,99.95,17802.69,47281.44,8760.0,194862.9,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.55,99.86,8748.0 -52,simulated,5A,2004.0,OutPatientHealthCare,Buffalo,4000,DOE,0.76,653774723.21,89.52,7842.0,100.0,443785.36,443785.36,116.66,74631.82,83368.37,32450.68,42533.35,0.0,18.26,55.81,63.98,79.41,88.82,92.56,95.7,97.89,99.22,99.83,13433.3,119428.89,8760.0,0.43,495408393.45,100.0,100.0,8760.0,290877.09,290877.09,76.47,56553.47,56553.47,45434.61,45434.61,8126.87,8126.87,28.95,62.74,82.93,91.5,95.63,97.73,98.8,99.52,99.86,26617.57,73760.21,8760.0,290877.09,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.66,89.52,7842.0 -53,simulated,2B,2022.0,Hospital,Tucson,22000,DOE,0.18,4940618906.62,100.0,8760.0,100.0,1638624.95,1638624.95,73.03,563997.59,563997.59,567940.06,567940.06,37398.89,37398.89,16.05,32.45,43.6,61.12,75.78,84.35,91.72,99.71,99.98,225103.54,804379.87,8760.0,0.94,869369986.9,100.0,100.0,8760.0,246417.64,246417.64,10.98,99243.15,99243.15,94168.02,94168.02,13824.2,13824.2,0.15,6.38,26.63,54.33,73.44,90.05,97.25,99.16,99.78,72166.75,125311.49,8760.0,186701.21,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.15,100.0,8760.0 -54,simulated,3C,2022.0,Hospital,San Francisco,22000,DOE,0.45,2712429680.37,100.0,8760.0,100.0,1421822.18,1421822.18,63.37,309638.09,309638.09,220621.48,220621.48,55867.63,55867.63,14.08,61.87,79.33,88.95,93.41,95.71,97.68,98.58,99.54,170409.72,382103.82,8760.0,0.95,1220024012.01,100.0,100.0,8760.0,289052.83,289052.83,12.88,139272.15,139272.15,138826.36,138826.36,18755.54,18755.54,0.06,0.49,5.81,24.99,57.43,85.09,95.95,98.87,99.83,115682.37,160550.56,8760.0,213588.51,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.2,100.0,8760.0 -55,simulated,5B,2004.0,HotelLarge,Denver,11000,DOE,1.14,1066763219.95,70.06,6137.0,100.0,684698.19,684698.19,60.35,121776.62,173824.87,29818.24,122107.86,0.0,713.7,58.31,66.7,74.26,80.65,86.16,91.16,95.9,98.7,99.85,0.0,212193.21,8760.0,0.08,1214689768.54,100.0,99.77,8740.0,625258.83,625258.83,55.11,138663.22,138980.52,62423.92,62725.23,0.0,0.01,50.03,57.69,67.0,75.37,83.54,90.02,94.12,97.76,99.19,11589.69,247253.14,8760.0,625258.83,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.91,69.83,6117.0 -56,simulated,3B,2004.0,OfficeLarge,El Paso,46000,DOE,0.06,3733721861.75,64.0,5606.0,100.0,3820068.86,3820068.86,82.47,426223.96,666022.45,61503.6,538666.47,0.0,0.01,62.51,75.34,83.98,93.86,98.88,99.94,99.99,99.99,99.99,0.0,742985.53,8760.0,0.06,234272504.78,100.0,25.94,2272.0,929466.59,929466.59,20.07,26743.44,103112.9,0.0,34663.79,0.0,1.96,91.36,94.6,96.69,98.33,99.14,99.61,99.79,99.89,99.95,0.0,109.02,8760.0,929466.59,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.24,12.43,1089.0 -57,simulated,5A,2022.0,OutPatientHealthCare,Chicago,4000,DOE,0.34,566614611.27,91.19,7988.0,100.0,407776.08,407776.08,107.2,64682.03,70933.23,32597.37,42119.31,0.0,14.07,53.7,72.24,84.2,88.2,91.7,94.85,97.53,99.33,99.87,12964.7,87947.1,8760.0,0.46,194336552.67,100.0,100.0,8760.0,240397.45,240397.45,63.2,22184.54,22184.54,11250.88,11250.88,3486.51,3486.51,74.2,88.46,94.17,96.74,98.21,98.94,99.46,99.62,99.78,6729.76,24883.93,8760.0,240397.45,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.59,91.19,7988.0 -58,simulated,5A,2004.0,HotelLarge,Buffalo,11000,DOE,0.64,1138178679.52,59.38,5202.0,100.0,755385.94,755385.94,66.58,129929.07,218796.36,11264.45,158171.66,0.0,933.92,62.09,69.61,75.64,79.74,84.11,89.43,93.96,97.83,99.67,0.0,219245.27,8760.0,0.21,729582027.66,100.0,99.98,8758.0,350429.53,350429.53,30.89,83285.62,83304.64,65533.16,65561.69,0.0,0.24,22.09,52.93,70.27,81.75,89.9,95.29,98.37,99.49,99.87,37533.6,117577.49,8760.0,350429.53,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.46,59.36,5200.0 -59,simulated,8,2004.0,HotelLarge,Fairbanks,11000,DOE,3.97,469683422.29,46.79,4099.0,100.0,487036.96,487036.96,42.93,53616.83,114584.88,0.0,61317.63,0.0,164.8,74.58,80.59,85.03,88.97,91.61,94.24,96.19,98.33,99.81,0.0,50823.44,8760.0,0.06,1866102423.56,100.0,100.0,8760.0,1114738.61,1114738.61,98.26,213025.39,213025.39,100991.16,100991.16,717.88,717.88,52.01,67.33,80.75,89.43,91.5,91.83,92.05,92.63,97.81,46586.16,287625.25,8760.0,1114738.61,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,2.29,46.79,4099.0 -60,simulated,3B,2004.0,HotelLarge,Los Angeles,11000,DOE,0.19,2459068630.14,94.76,8301.0,100.0,1124830.38,1124830.38,99.15,280715.6,296237.64,235308.15,251177.85,0.0,692.54,29.13,48.21,64.09,76.4,86.1,93.0,98.26,99.74,99.99,89765.06,436238.98,8760.0,0.72,458306935.06,100.0,99.91,8752.0,392723.95,392723.95,34.62,52318.14,52365.97,47162.84,47168.88,0.0,0.07,37.61,84.39,95.33,97.96,98.94,99.55,99.92,99.93,99.94,28656.56,64738.22,8760.0,392723.95,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.35,94.67,8293.0 -61,simulated,2B,2022.0,OutPatientHealthCare,Tucson,4000,DOE,0.09,881227596.26,100.0,8760.0,100.0,340539.0,340539.0,89.52,100596.76,100596.76,75085.5,75085.5,5886.23,5886.23,24.62,45.05,64.19,72.89,80.0,85.33,90.08,95.13,99.2,34956.05,146050.71,8760.0,0.98,77959886.53,100.0,100.0,8760.0,84036.51,84036.51,22.09,8899.53,8899.53,6392.4,6392.4,2455.54,2455.54,65.35,89.66,95.58,98.26,99.22,99.75,99.87,99.97,99.99,4641.34,10240.35,8760.0,65314.2,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.25,100.0,8760.0 -62,simulated,5A,2004.0,OutPatientHealthCare,Chicago,4000,DOE,0.56,843533836.16,91.12,7982.0,100.0,525433.82,525433.82,138.13,96293.82,105679.51,48584.0,80644.02,0.0,13.41,50.61,61.59,78.34,87.09,90.75,94.2,97.29,99.2,99.83,18687.51,145839.76,8760.0,0.49,468324696.02,100.0,100.0,8760.0,351077.33,351077.33,92.29,53461.72,53461.72,41203.95,41203.95,7883.47,7883.47,41.93,76.43,90.66,95.4,97.41,98.69,99.32,99.59,99.79,24016.72,67859.16,8760.0,351077.33,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.67,91.12,7982.0 -63,simulated,3B,2022.0,OfficeLarge,El Paso,46000,DOE,0.03,2698880000.3,64.86,5682.0,100.0,2175520.85,2175520.85,46.97,308091.32,474987.68,24278.79,272103.31,0.0,0.02,63.56,74.78,80.61,84.9,87.81,93.55,97.88,98.92,99.5,0.0,441094.56,8760.0,0.04,85676522.2,100.0,15.65,1371.0,532973.25,532973.25,11.51,9780.42,62491.99,0.0,22284.67,0.0,0.02,93.94,96.4,98.05,99.08,99.54,99.77,99.86,99.92,99.98,0.0,0.0,8760.0,532973.25,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.24,6.67,584.0 -64,simulated,2A,2022.0,HotelLarge,Houston,11000,DOE,0.02,2014942271.45,95.95,8405.0,100.0,602537.17,602537.17,53.11,230016.24,239731.38,252054.58,266627.98,0.0,134.21,28.74,34.95,40.87,48.58,57.43,70.8,86.14,94.05,98.92,37378.82,375314.85,8760.0,0.21,44717060.72,100.0,40.72,3567.0,109271.56,109271.56,9.63,5104.69,12536.32,0.0,1513.78,0.0,0.0,88.31,91.67,93.76,95.32,96.87,98.16,99.18,99.78,99.99,0.0,580.25,8760.0,109271.56,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.18,36.67,3212.0 -65,simulated,7,2022.0,Hospital,International Falls,22000,DOE,1.08,1916006315.6,95.92,8403.0,100.0,1916157.26,1916157.26,85.4,218722.18,228014.56,78591.37,85714.53,0.0,56.49,69.29,80.62,86.24,89.39,95.58,98.05,99.43,99.94,99.99,17437.99,254982.35,8760.0,0.34,2073453229.32,100.0,100.0,8760.0,1124217.59,1124217.59,50.11,236695.57,236695.57,182804.38,182804.38,57795.38,57795.38,13.13,60.96,80.47,92.33,95.29,96.3,98.5,99.32,99.85,132673.55,294971.42,8760.0,1124217.59,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.59,95.92,8403.0 -66,simulated,8,2022.0,OutPatientHealthCare,Fairbanks,4000,DOE,2.16,217273257.16,60.24,5277.0,100.0,217045.68,217045.68,57.06,24802.88,41173.63,7229.15,23356.68,0.0,9.96,67.96,79.92,87.13,91.48,94.41,96.29,97.53,98.53,99.59,0.0,29977.25,8760.0,0.12,469937425.13,100.0,100.0,8760.0,267341.17,267341.17,70.28,53645.82,53645.82,26669.97,26669.97,3528.68,3528.68,50.09,64.42,77.04,84.09,88.04,91.64,94.63,96.44,97.72,9592.59,75344.57,8760.0,267341.17,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.23,60.24,5277.0 -67,simulated,5A,2022.0,OutPatientHealthCare,Buffalo,4000,DOE,0.5,425432569.01,89.98,7882.0,100.0,334530.26,334530.26,87.94,48565.36,53975.21,23142.42,28054.47,0.0,10.87,59.05,74.69,85.5,89.95,93.05,95.87,97.91,99.17,99.79,9325.71,67506.16,8760.0,0.42,210878817.0,100.0,100.0,8760.0,198079.65,198079.65,52.07,24072.92,24072.92,13408.09,13408.09,3484.97,3484.97,62.73,82.23,90.65,94.73,97.11,98.47,99.33,99.78,99.95,7389.71,30443.74,8760.0,198079.65,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.59,89.98,7882.0 -68,simulated,3A,2004.0,Hospital,Sacramento,22000,DOE,0.32,7405444208.36,100.0,8760.0,100.0,1938593.14,1938593.14,86.4,845370.34,845370.34,835300.35,835300.35,170782.67,170782.67,0.1,6.56,21.21,43.87,63.44,86.82,93.72,97.8,99.61,615439.05,1038387.35,8760.0,1.0,2376406617.86,100.0,100.0,8760.0,447969.63,447969.63,19.97,271279.29,271279.29,270470.92,270470.92,80352.6,80352.6,0.0,0.01,1.02,8.69,25.96,48.97,73.44,88.24,97.32,221733.8,317399.11,8760.0,207059.78,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.23,100.0,8760.0 -69,simulated,5A,2022.0,OfficeLarge,Buffalo,46000,DOE,0.27,1187903364.55,39.29,3442.0,100.0,2252264.01,2252264.01,48.62,135605.41,345120.09,0.0,132645.23,0.0,0.0,83.54,88.87,92.13,94.32,95.66,98.44,99.55,99.83,99.97,0.0,30337.85,8760.0,0.0,326446834.71,100.0,39.24,3437.0,1199184.47,1199184.47,25.89,37265.62,94980.17,0.0,31635.24,0.0,0.01,89.28,95.08,97.82,98.84,99.38,99.74,99.89,99.97,99.98,0.0,9753.84,8760.0,1199184.47,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.53,6.87,602.0 -70,simulated,6B,2022.0,Hospital,Great Falls,22000,DOE,0.82,1822665667.77,98.17,8600.0,100.0,1394374.61,1394374.61,62.15,208066.86,211937.87,99159.11,101999.15,0.0,95.93,60.17,76.68,83.7,87.41,91.06,95.94,98.62,99.76,99.99,49362.86,255698.96,8760.0,0.49,1487964652.01,100.0,100.0,8760.0,935660.88,935660.88,41.7,169858.98,169858.98,142596.25,142596.25,22007.74,22007.74,19.09,70.25,90.31,95.27,97.72,98.06,98.73,99.5,99.89,104636.08,202001.81,8760.0,935660.88,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,0.67,98.17,8600.0 -71,simulated,7,2004.0,OfficeLarge,International Falls,46000,DOE,1.38,2212204972.37,38.76,3395.0,100.0,2971909.03,2971909.03,64.16,252534.81,651606.77,0.0,561585.58,0.0,0.01,72.79,81.43,88.53,93.21,95.92,98.84,99.54,99.89,99.97,0.0,379191.78,8760.0,0.01,3049956633.88,100.0,64.47,5648.0,3359305.08,3359305.08,72.52,348168.57,540006.49,39607.3,307820.13,0.0,3.35,69.18,80.63,87.12,91.53,95.46,97.95,99.26,99.81,99.93,0.0,470511.42,8760.0,3359305.08,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,1.13,12.96,1135.0 -72,simulated,3B,2004.0,OutPatientHealthCare,El Paso,4000,DOE,0.27,1055450933.85,99.99,8759.0,100.0,403116.61,403116.61,105.97,120485.27,120499.02,108059.54,108078.07,0.0,300.47,26.29,38.33,57.21,74.25,81.66,87.16,92.6,96.88,99.44,37781.2,163401.13,8760.0,0.82,282116397.83,100.0,100.0,8760.0,178734.82,178734.82,46.99,32205.07,32205.07,24800.34,24800.34,3724.77,3724.77,33.2,65.64,85.55,93.29,97.11,98.89,99.61,99.85,99.95,15900.11,42089.35,8760.0,175005.39,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.44,99.99,8759.0 -73,simulated,3B,2004.0,OfficeLarge,Los Angeles,46000,DOE,0.05,3839780173.09,89.09,7804.0,100.0,2554780.91,2554780.91,55.15,438331.07,492027.19,246878.89,323521.7,0.0,0.01,50.71,66.86,76.94,84.52,90.61,95.68,98.39,99.71,99.95,18531.02,714391.5,8760.0,0.43,178014383.61,100.0,29.62,2595.0,1343074.72,1343074.72,29.0,20321.28,68598.99,0.0,36726.96,0.0,0.02,95.03,98.85,99.73,99.94,99.95,99.98,99.98,99.98,99.99,0.0,2976.32,8760.0,1343074.72,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.53,25.1,2199.0 -74,simulated,4C,2022.0,OfficeLarge,Seattle,46000,DOE,0.43,640024520.5,36.12,3164.0,100.0,1787930.66,1787930.66,38.6,73062.16,202283.35,0.0,60074.96,0.0,0.01,88.38,93.2,95.56,96.83,97.57,98.78,99.52,99.86,99.99,0.0,9164.7,8760.0,0.02,277416432.45,100.0,32.45,2843.0,1023453.48,1023453.48,22.1,31668.54,97578.77,0.0,64924.7,0.0,0.01,87.11,95.05,98.56,99.6,99.85,99.91,99.97,99.98,99.98,0.0,5286.08,8760.0,1023453.48,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.57,8.78,769.0 -75,simulated,3C,2004.0,Hospital,San Jose,22000,DOE,0.44,5732856640.04,100.0,8760.0,100.0,2182979.31,2182979.31,97.3,654435.69,654435.69,598891.11,598891.11,182019.28,182019.28,0.76,20.37,61.53,83.77,91.04,96.39,99.35,99.93,99.99,464777.24,792621.41,8760.0,0.99,2495954218.5,100.0,100.0,8760.0,474007.83,474007.83,21.13,284926.28,284926.28,289694.67,289694.67,59993.19,59993.19,0.0,0.07,0.8,8.65,27.01,47.53,74.67,90.98,98.64,231444.34,332363.21,8760.0,228907.82,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.22,100.0,8760.0 -76,simulated,3B,2022.0,HotelLarge,Los Angeles,11000,DOE,0.03,1104906208.27,98.32,8613.0,100.0,538137.97,538137.97,47.43,126130.85,128283.55,94500.09,96972.88,0.0,282.71,33.22,54.58,68.65,78.57,86.21,92.98,97.13,99.02,99.79,34714.44,193862.94,8760.0,0.54,33755738.02,100.0,75.84,6644.0,204747.84,204747.84,18.05,3853.39,5080.63,999.55,1892.76,0.0,0.01,95.49,98.14,99.12,99.68,99.92,99.92,99.92,99.94,99.95,0.03,3062.37,8760.0,204747.84,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.38,74.17,6497.0 -77,simulated,5A,2004.0,OfficeLarge,Chicago,46000,DOE,0.45,3486798720.26,55.55,4866.0,100.0,5374737.33,5374737.33,116.03,398036.38,716563.65,88.98,559342.38,0.0,0.0,71.46,86.02,93.76,97.77,99.53,99.89,99.94,99.98,99.98,0.0,642190.9,8760.0,0.02,1570263470.89,100.0,50.7,4441.0,2805013.69,2805013.69,60.56,179253.82,353583.31,98.86,179039.23,0.0,4.13,79.68,88.15,93.08,96.2,98.04,99.09,99.61,99.86,99.94,0.0,185668.16,8760.0,2805013.69,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.52,15.88,1391.0 -78,simulated,2B,2022.0,HotelLarge,Tucson,11000,DOE,0.01,1464354856.66,98.76,8651.0,100.0,487083.05,487083.05,42.93,167163.8,169270.01,170278.45,174192.79,0.0,368.82,27.19,37.44,45.96,54.78,67.66,81.75,91.22,97.28,99.68,41951.74,268876.27,8760.0,0.31,21591412.86,100.0,31.15,2729.0,111526.97,111526.97,9.83,2464.77,7911.84,0.0,577.82,0.0,0.0,93.88,96.19,97.55,98.37,98.92,99.34,99.61,99.85,99.95,0.0,79.99,8760.0,111526.97,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.23,29.91,2620.0 -79,simulated,4A,2022.0,OutPatientHealthCare,New York,4000,DOE,0.26,613087852.18,97.08,8504.0,100.0,399807.17,399807.17,105.1,69987.2,72094.06,35865.11,39035.24,0.0,16.01,51.88,68.98,81.78,86.53,90.53,93.68,96.39,98.52,99.51,14358.66,93500.41,8760.0,0.63,156504980.11,100.0,100.0,8760.0,191115.39,191115.39,50.24,17865.87,17865.87,11115.74,11115.74,3520.52,3520.52,70.59,89.58,95.37,97.9,99.05,99.57,99.84,99.94,99.98,6661.13,21303.32,8760.0,191115.39,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.48,97.08,8504.0 -80,simulated,3B,2022.0,Hospital,Los Angeles,22000,DOE,0.25,4345410067.84,99.97,8757.0,100.0,1510271.66,1510271.66,67.31,496051.38,496221.32,406280.47,406378.65,0.0,0.48,6.05,37.07,55.89,70.38,80.0,85.83,90.08,94.84,99.55,226374.84,665105.59,8760.0,0.98,1065615394.28,100.0,100.0,8760.0,605483.9,605483.9,26.99,121645.59,121645.59,120731.07,120731.07,19730.45,19730.45,1.71,50.41,96.8,99.83,99.93,99.93,99.95,99.97,99.98,99011.15,142307.51,8760.0,605483.9,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.4,99.97,8757.0 -81,simulated,5A,2004.0,Hospital,Buffalo,22000,DOE,0.6,4724011441.07,97.83,8570.0,100.0,2798938.64,2798938.64,124.75,539270.71,551226.54,342171.9,353434.86,0.0,15.58,42.05,59.62,67.27,88.86,96.31,99.33,99.83,99.91,99.98,183480.82,918467.14,8760.0,0.71,2832926321.5,100.0,100.0,8760.0,815284.47,815284.47,36.34,323393.42,323393.42,301201.94,301201.94,46621.48,46621.48,0.03,1.15,24.21,59.19,80.3,91.77,97.27,99.36,99.82,246240.53,381979.05,8760.0,815284.47,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.29,97.83,8570.0 -82,simulated,6B,2022.0,HotelLarge,Great Falls,11000,DOE,0.75,425850320.77,78.22,6852.0,100.0,387477.52,387477.52,34.15,48613.05,62149.78,9585.65,22748.18,0.0,45.3,69.58,78.64,83.76,87.88,91.43,94.77,97.4,98.81,99.81,780.38,55776.99,8760.0,0.06,318117422.51,100.0,68.49,6000.0,555884.93,555884.93,49.0,36314.77,53019.57,8582.43,37114.35,0.0,0.0,75.57,95.61,97.66,97.95,98.04,98.09,98.38,99.09,99.89,0.0,54394.32,8760.0,555884.93,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.43,46.79,4099.0 -83,simulated,4A,2022.0,Hospital,New York,22000,DOE,0.44,3532479573.89,100.0,8760.0,100.0,1693110.85,1693110.85,75.46,403251.09,403251.09,238052.89,238052.89,526.73,526.73,42.19,58.87,67.13,74.44,84.69,90.08,93.82,96.77,99.43,73422.95,689360.85,8760.0,0.68,1539620923.37,100.0,100.0,8760.0,464967.78,464967.78,20.72,175755.81,175755.81,162299.53,162299.53,65267.8,65267.8,0.0,6.07,31.74,62.2,80.71,93.45,98.52,99.69,99.98,132518.75,217326.13,8760.0,464038.28,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.27,100.0,8760.0 -84,simulated,4C,2022.0,OutPatientHealthCare,Seattle,4000,DOE,0.36,370952266.13,99.61,8726.0,100.0,261269.39,261269.39,68.68,42346.15,42511.15,26235.81,26361.31,0.0,13.76,49.87,75.06,87.05,91.83,94.29,96.4,98.11,99.13,99.65,16697.7,52194.21,8760.0,0.85,132275863.61,100.0,100.0,8760.0,113458.18,113458.18,29.83,15099.98,15099.98,10812.95,10812.95,3605.18,3605.18,52.61,81.79,92.01,96.61,98.4,99.26,99.59,99.83,99.95,6889.46,18935.01,8760.0,113382.46,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.43,99.61,8726.0 -85,simulated,5C,2004.0,OfficeLarge,Port Angeles,46000,DOE,1.15,720788266.65,36.2,3171.0,100.0,1577756.16,1577756.16,34.06,82281.77,227306.3,0.0,82079.37,0.0,0.01,85.15,89.78,93.57,95.81,97.36,98.34,99.13,99.87,99.97,0.0,10803.74,8760.0,0.02,831262982.08,100.0,52.15,4568.0,1470853.06,1470853.06,31.75,94893.03,181975.26,506.63,105174.29,0.0,0.02,77.43,87.02,93.58,97.18,98.88,99.57,99.89,99.94,99.99,0.0,117952.18,8760.0,1470853.06,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.93,12.11,1061.0 -86,simulated,6B,2004.0,OfficeLarge,Great Falls,46000,DOE,1.04,1802019442.63,41.39,3626.0,100.0,2008323.23,2008323.23,43.36,205709.98,496971.72,0.0,448283.76,0.0,0.0,70.87,77.33,85.46,91.37,94.47,96.54,98.79,99.47,99.85,0.0,355415.28,8760.0,0.01,1879487631.22,100.0,60.42,5293.0,3089939.87,3089939.87,66.71,214553.38,355089.29,13230.95,189726.41,0.0,3.18,76.79,88.57,93.78,96.24,97.83,98.95,99.54,99.89,99.97,0.0,277768.85,8760.0,3089939.87,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.54,14.1,1235.0 -87,simulated,1A,2004.0,Hospital,Miami,22000,DOE,0.15,13121884482.24,100.0,8760.0,100.0,3388621.23,3388621.23,151.03,1497932.02,1497932.02,1508870.39,1508870.39,338898.01,338898.01,0.0,1.78,9.24,35.91,70.09,92.96,97.57,99.24,99.82,1190620.58,1753850.84,8760.0,1.0,1934950425.1,100.0,100.0,8760.0,421883.63,421883.63,18.8,220884.75,220884.75,223581.1,223581.1,27103.96,27103.96,0.07,0.92,3.48,15.91,40.65,73.48,93.07,98.79,99.91,185389.34,255390.92,8760.0,-33181.09,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.12,100.0,8760.0 -88,simulated,2A,2022.0,HotelLarge,Tampa,11000,DOE,0.01,2294631748.4,98.33,8614.0,100.0,603422.81,603422.81,53.19,261944.26,266384.0,314975.54,317874.87,0.0,467.73,20.38,27.4,33.05,38.6,46.78,67.1,84.79,94.65,99.34,97124.76,383068.16,8760.0,0.28,18144805.68,100.0,32.81,2874.0,87664.37,87664.37,7.73,2071.32,6313.43,0.0,326.22,0.0,0.0,94.53,95.89,96.8,97.74,98.46,99.03,99.42,99.65,99.81,0.0,75.57,8760.0,87664.37,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.15,31.14,2728.0 -89,simulated,2B,2004.0,Hospital,Tucson,22000,DOE,0.23,8138627626.83,100.0,8760.0,100.0,2977285.74,2977285.74,132.7,929067.08,929067.08,903071.57,903071.57,142195.4,142195.4,6.16,19.9,48.36,74.26,92.68,98.92,99.43,99.76,99.94,726376.06,1201023.31,8760.0,0.99,1882291041.31,100.0,100.0,8760.0,467834.51,467834.51,20.85,214873.41,214873.41,208881.9,208881.9,25476.84,25476.84,0.09,2.09,17.66,37.85,63.85,80.32,91.22,97.98,99.69,159335.01,262559.82,8760.0,264578.49,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.16,100.0,8760.0 -90,simulated,2A,2004.0,OutPatientHealthCare,Tampa,4000,DOE,0.14,1925461441.49,99.99,8759.0,100.0,550026.62,550026.62,144.59,219801.53,219826.63,183764.85,183779.66,0.0,99.58,3.23,20.76,40.75,63.82,72.4,76.67,83.4,91.4,97.51,122190.07,311536.02,8760.0,0.98,267344610.07,100.0,100.0,8760.0,181587.4,181587.4,47.74,30518.79,30518.79,25043.8,25043.8,3493.54,3493.54,27.33,72.29,90.01,95.74,98.47,99.53,99.82,99.95,99.98,17505.51,38137.27,8760.0,181454.62,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.33,99.99,8759.0 -91,simulated,3B,2022.0,HotelLarge,El Paso,11000,DOE,0.06,1138637800.29,94.1,8243.0,100.0,447052.03,447052.03,39.4,129981.48,138133.91,105734.78,123103.37,0.0,209.48,39.14,47.51,54.62,62.75,73.32,84.51,92.19,97.67,99.54,18752.46,230644.45,8760.0,0.18,66323875.88,100.0,37.71,3303.0,121074.43,121074.43,10.67,7571.22,20079.89,0.0,4825.27,0.0,0.0,84.26,88.16,91.08,93.58,95.68,97.39,98.73,99.45,99.85,0.0,516.94,8760.0,121074.43,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.27,31.85,2790.0 -92,simulated,4A,2004.0,Hospital,New York,22000,DOE,0.38,7017860597.17,99.94,8755.0,100.0,3513532.28,3513532.28,156.6,801125.64,801583.16,719705.47,720321.25,0.0,980.45,19.66,48.87,73.5,88.3,96.86,98.8,99.29,99.62,99.83,409098.43,1070774.04,8760.0,0.91,2662264426.25,100.0,100.0,8760.0,718766.28,718766.28,32.04,303911.46,303911.46,288953.36,288953.36,14409.27,14409.27,0.51,1.47,15.53,49.41,74.17,90.08,97.44,99.49,99.78,238988.88,362736.47,8760.0,699960.1,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.2,99.94,8755.0 -93,simulated,8,2022.0,OfficeLarge,Fairbanks,46000,DOE,2.2,436089153.73,38.29,3354.0,100.0,1358448.35,1358448.35,29.33,49781.87,130020.62,0.0,4462.37,0.0,0.01,89.89,93.32,95.63,97.16,98.0,98.53,99.02,99.53,99.83,0.0,177.66,8760.0,0.0,958576591.83,100.0,53.53,4689.0,1972540.65,1972540.65,42.58,109426.55,204430.92,260.76,59178.36,0.0,0.0,83.89,92.25,94.73,95.86,96.51,98.05,99.22,99.74,99.93,0.0,76973.48,8760.0,1972540.65,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.45,20.58,1803.0 -94,simulated,2A,2004.0,Hospital,Tampa,22000,DOE,0.18,11907046956.82,100.0,8760.0,100.0,4236177.91,4236177.91,188.81,1359251.94,1359251.94,1390140.23,1390140.23,133155.0,133155.0,2.02,17.84,43.95,74.68,95.06,97.98,99.3,99.83,99.91,1022848.56,1699349.29,8760.0,1.0,2100034283.65,100.0,100.0,8760.0,555584.64,555584.64,24.76,239729.94,239729.94,236805.72,236805.72,1842.72,1842.72,0.57,2.84,12.69,39.89,75.53,90.11,96.86,99.59,99.93,194617.23,276812.58,8760.0,336152.22,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.13,100.0,8760.0 -95,simulated,3A,2004.0,OfficeLarge,Sacramento,46000,DOE,0.12,3618900590.18,97.8,8567.0,100.0,2499491.67,2499491.67,53.96,413116.51,422423.32,155862.8,169649.57,0.0,0.87,57.95,70.3,78.68,84.17,88.84,92.29,95.67,99.1,99.74,11007.15,627203.41,8760.0,0.18,432687647.92,100.0,44.28,3879.0,1414897.75,1414897.75,30.55,49393.57,111546.18,0.0,29770.73,0.0,1.55,88.66,93.94,96.93,98.36,99.29,99.73,99.95,99.98,99.99,0.0,19793.82,8760.0,1410674.08,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.57,42.2,3697.0 -96,simulated,3C,2004.0,HotelLarge,San Jose,11000,DOE,0.48,1333061788.11,83.63,7326.0,100.0,871118.75,871118.75,76.78,152176.0,181963.12,100657.76,133089.44,0.0,775.98,46.76,66.79,78.61,86.37,91.71,95.46,98.03,99.42,99.91,15147.13,228402.95,8760.0,0.4,638062259.62,100.0,100.0,8760.0,365309.47,365309.47,32.2,72838.16,72838.16,49357.2,49357.2,0.08,0.08,32.32,69.46,80.97,86.64,90.91,93.92,96.0,97.91,99.73,30158.16,85846.73,8760.0,365309.47,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.42,83.63,7326.0 -97,simulated,3B,2022.0,OutPatientHealthCare,Los Angeles,4000,DOE,0.12,792564047.93,99.94,8755.0,100.0,300232.38,300232.38,78.93,90475.35,90527.02,66363.7,66395.41,0.0,354.81,23.81,45.46,62.57,71.7,79.83,86.03,90.55,94.44,97.98,30873.71,131763.3,8760.0,0.99,95794044.63,100.0,100.0,8760.0,143732.8,143732.8,37.78,10935.39,10935.39,8199.65,8199.65,699.15,699.15,78.98,96.22,99.33,99.92,99.95,99.97,99.97,99.98,99.98,5924.39,13138.27,8760.0,143732.8,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.48,99.94,8755.0 -98,simulated,5A,2022.0,HotelLarge,Buffalo,11000,DOE,0.35,574627012.17,79.57,6970.0,100.0,508570.15,508570.15,44.83,65596.69,82442.9,6500.21,21102.83,0.0,65.94,68.7,76.56,81.58,86.56,90.89,94.44,97.4,99.08,99.84,867.5,87380.3,8760.0,0.07,203367475.39,100.0,73.95,6478.0,171506.28,171506.28,15.12,23215.47,31393.56,5555.44,26888.75,0.0,0.0,56.76,69.05,80.42,90.29,96.27,99.08,99.76,99.93,99.97,0.0,42734.76,8760.0,171228.48,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.34,53.54,4690.0 -99,simulated,4C,2022.0,Hospital,Seattle,22000,DOE,0.58,2351020630.8,100.0,8760.0,100.0,1435244.27,1435244.27,63.97,268381.35,268381.35,203167.85,203167.85,17791.3,17791.3,34.57,67.98,84.98,91.36,94.08,95.51,96.51,97.33,98.88,90022.29,324236.36,8760.0,0.77,1355576001.73,100.0,100.0,8760.0,330244.85,330244.85,14.72,154746.12,154746.12,148157.41,148157.41,8677.69,8677.69,0.79,4.34,15.19,37.79,59.98,76.32,90.15,97.63,99.75,115865.62,195565.81,8760.0,304101.38,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.23,100.0,8760.0 -100,simulated,3A,2022.0,OutPatientHealthCare,Sacramento,4000,DOE,0.17,653269269.7,99.98,8758.0,100.0,367271.06,367271.06,96.55,74574.12,74591.15,51147.19,51173.36,0.0,183.31,42.21,64.47,78.49,84.65,89.59,93.69,96.67,98.7,99.69,22390.94,96636.4,8760.0,0.91,112406269.26,100.0,100.0,8760.0,106423.8,106423.8,27.98,12831.77,12831.77,8902.28,8902.28,3470.03,3470.03,59.62,85.3,93.76,97.23,98.55,99.29,99.62,99.82,99.94,6024.91,15258.47,8760.0,103280.3,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.29,99.98,8758.0 -101,simulated,4B,2022.0,OfficeLarge,Albuquerque,46000,DOE,0.09,1968563709.73,57.64,5049.0,100.0,1885122.68,1885122.68,40.7,224721.88,389891.8,7068.41,202371.67,0.0,0.01,70.33,79.87,84.24,87.17,89.44,93.42,97.42,99.49,99.91,0.0,271702.74,8760.0,0.04,178350168.59,100.0,22.33,1956.0,619985.03,619985.03,13.38,20359.61,91181.07,0.0,47523.29,0.0,0.01,89.65,92.85,96.02,97.98,98.96,99.46,99.82,99.93,99.99,0.0,0.0,8760.0,619985.03,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.33,9.33,817.0 -102,simulated,5C,2004.0,Hospital,Port Angeles,22000,DOE,0.75,3531005132.98,100.0,8760.0,100.0,1368787.55,1368787.55,61.01,403082.78,403082.78,351081.73,351081.73,71339.26,71339.26,1.12,25.27,61.82,81.4,89.14,96.47,98.21,99.36,99.86,273660.04,472069.98,8760.0,0.93,2653159630.36,100.0,100.0,8760.0,483371.21,483371.21,21.54,302872.1,302872.1,302347.65,302347.65,141352.93,141352.93,0.0,0.0,0.03,3.68,19.21,43.11,69.34,89.04,98.32,253448.86,350549.45,8760.0,374861.58,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.35,100.0,8760.0 -103,simulated,3B,2022.0,OfficeLarge,Los Angeles,46000,DOE,0.02,2030311038.35,68.58,6008.0,100.0,1864254.85,1864254.85,40.25,231770.67,337934.59,33138.26,185841.12,0.0,0.04,65.78,78.32,85.1,88.74,90.98,95.03,97.53,99.51,99.92,0.0,312686.22,8760.0,0.15,33396780.91,100.0,25.34,2220.0,577887.15,577887.15,12.48,3812.42,15043.6,0.0,0.17,0.0,0.0,97.68,98.93,99.65,99.89,99.98,99.98,99.98,99.99,99.99,0.0,0.01,8760.0,577887.15,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.31,23.53,2061.0 -104,simulated,3C,2004.0,OutPatientHealthCare,San Jose,4000,DOE,0.38,919456942.22,100.0,8760.0,100.0,373437.17,373437.17,98.17,104960.84,104960.84,97041.08,97041.08,7286.17,7286.17,20.48,32.76,61.77,79.19,87.95,93.4,96.95,98.98,99.86,45045.08,138189.32,8760.0,0.88,350261374.76,100.0,100.0,8760.0,163012.38,163012.38,42.85,39984.18,39984.18,34017.35,34017.35,8807.14,8807.14,7.98,46.77,72.87,86.96,94.13,97.57,99.12,99.73,99.92,24019.08,50654.46,8760.0,139048.43,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.44,100.0,8760.0 -105,simulated,6A,2022.0,Hospital,Rochester,22000,DOE,0.75,2495776792.35,98.09,8593.0,100.0,1583705.43,1583705.43,70.59,284906.03,290443.01,105064.53,109809.25,0.0,435.37,55.83,67.88,77.52,83.61,88.81,92.53,94.74,96.83,99.38,34892.75,423208.16,8760.0,0.42,1862117790.26,100.0,100.0,8760.0,1211939.78,1211939.78,54.02,212570.52,212570.52,169747.76,169747.76,61425.23,61425.23,21.8,68.45,90.64,96.79,97.97,98.53,99.26,99.77,99.94,125733.26,269552.83,8760.0,1211939.78,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.77,98.09,8593.0 -106,simulated,3A,2022.0,OfficeLarge,Atlanta,46000,DOE,0.04,2422163982.37,57.9,5072.0,100.0,1735366.99,1735366.99,37.46,276502.74,477555.99,12318.1,307663.6,0.0,0.01,65.13,72.82,78.46,82.42,86.02,89.03,91.18,97.48,99.94,0.0,401118.92,8760.0,0.02,100455368.69,100.0,22.07,1933.0,929554.67,929554.67,20.07,11467.51,51968.63,0.0,11546.48,0.0,0.02,95.97,98.29,99.13,99.66,99.83,99.91,99.94,99.97,99.99,0.0,0.0,8760.0,929554.67,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.54,7.33,642.0 -107,simulated,8,2022.0,Hospital,Fairbanks,22000,DOE,2.2,1132234450.71,92.76,8126.0,100.0,1235576.61,1235576.61,55.07,129250.51,139334.78,49587.61,62486.39,0.0,148.18,69.39,83.66,90.02,93.73,95.23,96.64,98.2,99.12,99.7,561.53,159130.94,8760.0,0.22,2486299925.96,100.0,100.0,8760.0,1208505.36,1208505.36,53.86,283824.19,283824.19,225624.52,225624.52,17482.07,17482.07,19.05,52.61,72.49,87.65,92.02,95.7,96.85,98.82,99.65,134967.0,376942.42,8760.0,1208505.36,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,0.98,92.76,8126.0 -108,simulated,5B,2022.0,OfficeLarge,Denver,46000,DOE,0.3,1510770934.84,49.0,4292.0,100.0,1727050.5,1727050.5,37.28,172462.44,351996.96,0.0,159184.22,0.0,0.01,76.13,82.88,87.26,89.54,91.13,93.55,96.92,99.08,99.9,0.0,150620.59,8760.0,0.02,446961921.32,100.0,33.03,2893.0,1394612.45,1394612.45,30.11,51023.05,154497.73,0.0,95327.92,0.0,0.0,86.44,93.7,97.1,98.56,99.36,99.67,99.9,99.94,99.99,0.0,7717.85,8760.0,1394612.45,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.81,11.7,1025.0 -109,simulated,3B,2004.0,Hospital,Los Angeles,22000,DOE,0.32,7005460124.87,99.97,8757.0,100.0,2827304.97,2827304.97,126.02,799710.06,799984.03,760696.14,760950.15,0.0,0.73,0.63,32.32,66.54,84.32,93.06,96.35,97.93,99.25,99.78,517590.09,929063.79,8760.0,1.0,2237658786.16,100.0,100.0,8760.0,691779.94,691779.94,30.83,255440.5,255440.5,260276.99,260276.99,21671.49,21671.49,0.31,3.97,24.69,58.47,93.39,99.87,99.94,99.95,99.97,208279.45,301796.36,8760.0,691779.94,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.24,99.97,8757.0 -110,simulated,7,2004.0,OutPatientHealthCare,International Falls,4000,DOE,1.29,528573125.7,73.8,6465.0,100.0,474213.25,474213.25,124.66,60339.4,81759.18,21390.09,39306.62,0.0,13.17,65.06,72.57,85.09,91.5,95.19,97.39,98.69,99.58,99.91,0.0,102336.59,8760.0,0.25,680247880.32,100.0,100.0,8760.0,381199.7,381199.7,100.21,77653.87,77653.87,54604.89,54604.89,8277.61,8277.61,33.92,64.39,79.55,88.06,92.37,95.15,96.97,98.18,98.96,30381.32,99675.49,8760.0,381199.7,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.8,73.8,6465.0 -111,simulated,6A,2022.0,HotelLarge,Rochester,11000,DOE,0.52,615249043.81,79.9,6999.0,100.0,580723.99,580723.99,51.19,70233.91,87905.28,7550.02,21654.66,0.0,71.53,70.38,77.19,82.26,86.89,92.19,96.23,98.53,99.6,99.95,1039.2,93264.28,8760.0,0.05,320072078.4,100.0,69.76,6111.0,609443.39,609443.39,53.72,36537.91,52376.38,7767.95,33667.3,0.0,0.02,81.07,95.05,97.72,97.96,98.0,98.07,98.33,99.02,99.67,0.0,47671.89,8760.0,609443.39,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.05,49.68,4352.0 -112,simulated,3B,2022.0,OutPatientHealthCare,San Diego,4000,DOE,0.14,636172642.57,100.0,8760.0,100.0,282838.01,282838.01,74.35,72622.45,72622.45,49099.92,49099.92,7362.41,7362.41,28.61,55.33,69.54,77.33,84.2,89.92,94.74,97.57,99.55,26127.55,103356.42,8760.0,0.99,90828422.53,100.0,100.0,8760.0,64276.45,64276.45,16.9,10368.54,10368.54,8080.78,8080.78,3433.58,3433.58,34.7,78.34,89.37,94.95,97.74,98.93,99.54,99.83,99.93,5668.82,11970.38,8760.0,42650.81,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.23,100.0,8760.0 -113,simulated,1A,2022.0,OutPatientHealthCare,Miami,4000,DOE,0.05,1510902024.46,100.0,8760.0,100.0,416492.17,416492.17,109.49,172477.4,172477.4,130169.95,130169.95,11926.73,11926.73,2.47,16.6,47.04,62.27,67.88,74.58,81.23,87.87,95.66,95596.51,252211.33,8760.0,1.0,72706972.58,100.0,100.0,8760.0,58157.36,58157.36,15.29,8299.88,8299.88,6755.15,6755.15,3376.33,3376.33,39.2,84.84,93.04,97.76,98.79,99.62,99.89,99.93,99.99,4903.33,9747.32,8760.0,22940.3,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.14,100.0,8760.0 -114,simulated,3C,2022.0,OfficeLarge,San Francisco,46000,DOE,0.09,607313892.44,44.85,3929.0,100.0,1418564.0,1418564.0,30.63,69328.07,154572.13,0.0,65850.37,0.0,0.02,83.73,91.19,95.42,97.69,98.66,99.02,99.44,99.9,99.98,0.0,43362.0,8760.0,0.06,57275330.0,100.0,28.04,2456.0,354078.66,354078.66,7.64,6538.28,23320.57,0.0,2605.29,0.0,0.0,93.93,96.74,98.23,99.26,99.65,99.81,99.89,99.94,99.99,0.0,0.04,8760.0,354078.66,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.25,15.81,1385.0 -115,simulated,3A,2022.0,Hospital,Atlanta,22000,DOE,0.27,4626988451.83,100.0,8760.0,100.0,1520541.9,1520541.9,67.77,528195.03,528195.03,448197.67,448197.67,526.59,526.59,26.26,39.61,50.48,59.0,70.43,81.34,86.6,91.19,96.87,138301.93,810748.87,8760.0,0.81,1237409733.71,100.0,100.0,8760.0,446506.28,446506.28,19.9,141256.82,141256.82,130378.99,130378.99,57928.06,57928.06,0.0,11.06,53.09,80.16,91.95,96.93,99.28,99.89,99.99,104957.1,166521.94,8760.0,445624.2,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.29,100.0,8760.0 -116,simulated,3B,2004.0,OutPatientHealthCare,San Diego,4000,DOE,0.29,1072405204.69,100.0,8760.0,100.0,374558.2,374558.2,98.46,122420.69,122420.69,110464.38,110464.38,11063.89,11063.89,14.19,23.68,51.42,71.46,82.76,89.49,94.85,97.84,99.6,77045.57,159339.25,8760.0,0.94,313652179.63,100.0,100.0,8760.0,135713.08,135713.08,35.68,35805.04,35805.04,30739.56,30739.56,9328.84,9328.84,3.93,38.34,70.56,85.43,92.91,96.84,98.56,99.59,99.9,23057.39,44003.78,8760.0,100454.42,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.36,100.0,8760.0 -117,simulated,3A,2004.0,OfficeLarge,Atlanta,46000,DOE,0.12,5330037943.63,95.01,8323.0,100.0,2632331.64,2632331.64,56.83,608451.82,640398.65,335228.65,398286.88,0.0,3.36,47.12,57.29,66.64,74.14,81.22,86.06,94.3,97.27,99.12,13474.77,1089870.55,8760.0,0.08,665540750.59,100.0,38.15,3342.0,2195981.42,2195981.42,47.41,75974.97,199144.45,0.0,47756.53,0.0,0.93,88.4,93.04,96.79,98.62,99.33,99.75,99.87,99.92,99.97,0.0,17462.18,8760.0,2195109.82,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.83,33.26,2914.0 -118,simulated,6B,2022.0,OfficeLarge,Great Falls,46000,DOE,0.76,1054981763.88,38.41,3365.0,100.0,1924529.65,1924529.65,41.55,120431.71,313516.13,0.0,107932.14,0.0,0.01,84.19,89.52,92.44,93.79,94.93,96.88,98.6,99.45,99.83,0.0,20224.8,8760.0,0.01,803825528.33,100.0,41.27,3615.0,1976526.13,1976526.13,42.67,91760.91,222358.38,0.0,133973.54,0.0,0.01,84.2,92.67,95.97,97.68,98.63,99.37,99.71,99.9,99.97,0.0,76103.73,8760.0,1976526.13,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.03,9.09,796.0 -119,simulated,2B,2004.0,HotelLarge,Tucson,11000,DOE,0.11,2917500981.22,89.77,7864.0,100.0,970651.0,970651.0,85.56,333048.06,370994.53,313045.61,362216.3,0.0,934.35,26.61,37.97,47.98,57.82,67.21,77.59,87.87,96.58,99.71,84620.12,558884.12,8760.0,0.4,314774293.38,100.0,98.79,8654.0,344939.71,344939.71,30.4,35933.14,36373.27,12623.2,12946.0,0.0,0.01,69.54,83.89,89.67,93.48,96.05,97.61,98.49,99.21,99.68,3352.76,45319.63,8760.0,344939.71,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.36,88.56,7758.0 -120,simulated,4C,2004.0,OfficeLarge,Seattle,46000,DOE,0.65,1246478706.27,49.49,4335.0,100.0,1925078.56,1925078.56,41.56,142292.09,287538.34,0.0,121424.21,0.0,0.0,79.18,86.22,91.13,94.02,96.06,97.31,98.87,99.63,99.82,0.0,116182.22,8760.0,0.04,814380696.37,100.0,51.47,4509.0,1577448.85,1577448.85,34.06,92965.83,180612.26,384.04,105492.01,0.0,4.08,78.48,88.58,95.1,98.06,99.28,99.71,99.89,99.91,99.97,0.0,115575.21,8760.0,1577448.85,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.82,17.51,1534.0 -121,simulated,5A,2004.0,Hospital,Chicago,22000,DOE,0.46,5929963979.06,95.56,8371.0,100.0,3958415.23,3958415.23,176.43,676936.53,708393.74,434576.77,498650.29,0.0,49.35,47.01,57.6,80.51,93.22,98.24,99.02,99.42,99.61,99.86,233455.74,1034799.53,8760.0,0.73,2748553368.23,100.0,100.0,8760.0,1130002.8,1130002.8,50.37,313761.8,313761.8,286336.2,286336.2,949.47,949.47,1.05,20.92,69.18,88.92,95.54,97.87,98.85,99.52,99.76,235571.35,361489.38,8760.0,1130002.8,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.29,95.56,8371.0 -122,simulated,4A,2022.0,HotelLarge,New York,11000,DOE,0.17,931297801.33,82.49,7226.0,100.0,539976.99,539976.99,47.59,106312.53,128881.51,16022.33,49965.0,0.0,65.53,59.26,65.31,70.46,75.57,80.62,87.71,94.39,97.96,99.53,1722.27,209624.7,8760.0,0.07,161873462.67,100.0,66.11,5791.0,134329.23,134329.23,11.84,18478.71,27952.59,1021.87,21897.22,0.0,0.01,61.84,70.32,80.09,86.54,91.94,96.3,99.03,99.82,99.97,0.0,32972.84,8760.0,134241.86,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.25,48.6,4257.0 -123,simulated,2A,2004.0,Hospital,Houston,22000,DOE,0.2,10922427413.04,100.0,8760.0,100.0,3714278.69,3714278.69,165.55,1246852.44,1246852.44,1194317.59,1194317.59,77629.98,77629.98,3.94,19.6,41.16,66.64,87.83,96.95,98.81,99.53,99.79,863409.45,1601305.94,8760.0,0.99,2233372018.16,100.0,100.0,8760.0,595464.71,595464.71,26.54,254951.14,254951.14,246645.39,246645.39,11008.8,11008.8,0.78,3.54,16.36,44.73,73.49,88.09,95.78,98.9,99.86,200962.38,302088.3,8760.0,454389.76,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.16,100.0,8760.0 -124,simulated,2A,2004.0,HotelLarge,Tampa,11000,DOE,0.07,4175366144.64,93.06,8152.0,100.0,968346.21,968346.21,85.35,476639.97,512189.17,573990.77,594959.41,0.0,1222.08,16.6,22.74,27.73,33.25,38.74,51.23,71.89,91.15,99.32,234248.5,690885.99,8760.0,0.7,280859873.56,100.0,93.7,8208.0,173723.99,173723.99,15.31,32061.63,34217.82,21899.33,23458.94,0.0,0.83,39.65,66.71,79.21,87.66,92.64,96.19,98.38,99.59,99.9,11553.76,45320.71,8760.0,173723.99,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.18,86.76,7600.0 -125,simulated,3C,2022.0,HotelLarge,San Francisco,11000,DOE,0.19,362023236.84,93.97,8232.0,100.0,333187.31,333187.31,29.37,41326.85,43977.56,21380.44,23737.68,0.0,96.84,61.92,78.15,88.18,93.62,96.67,98.4,99.28,99.68,99.92,8340.51,58462.67,8760.0,0.35,69039472.58,100.0,88.39,7743.0,107840.41,107840.41,9.51,7881.22,8916.37,2146.22,2811.04,0.0,0.02,82.89,89.03,92.57,95.23,96.83,98.08,98.78,99.34,99.7,303.52,6347.75,8760.0,107840.41,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.32,82.36,7215.0 -126,simulated,3B,2004.0,OfficeLarge,San Diego,46000,DOE,0.07,3271638538.92,84.95,7442.0,100.0,2201900.14,2201900.14,47.54,373474.72,439618.19,181858.51,292790.38,0.0,0.01,52.92,67.09,77.41,84.34,89.26,94.67,97.76,99.26,99.93,4800.12,590946.07,8760.0,0.36,240536493.46,100.0,37.2,3259.0,624966.24,624966.24,13.49,27458.5,73806.84,0.0,32685.21,0.0,1.7,86.18,92.17,95.4,97.51,98.68,99.36,99.82,99.92,99.97,0.0,13670.95,8760.0,624965.11,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.28,31.7,2777.0 -127,simulated,6B,2004.0,Hospital,Great Falls,22000,DOE,0.73,3655199204.06,92.68,8119.0,100.0,2031636.47,2031636.47,90.55,417260.18,450203.13,287012.7,308517.33,0.0,0.01,32.37,65.0,67.8,85.35,93.92,98.41,99.74,99.98,99.99,165855.06,740080.09,8760.0,0.65,2650672465.49,100.0,100.0,8760.0,1117346.84,1117346.84,49.8,302588.18,302588.18,267382.13,267382.13,60653.99,60653.99,1.03,30.38,71.94,89.54,94.16,95.67,97.34,98.87,99.65,210728.37,346660.14,8760.0,1117346.84,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,0.55,92.68,8119.0 -128,simulated,6A,2004.0,OutPatientHealthCare,Rochester,4000,DOE,0.93,646908206.68,82.43,7221.0,100.0,503248.19,503248.19,132.29,73847.97,89587.07,28307.55,46547.61,0.0,17.56,59.3,68.22,83.36,89.99,93.7,96.13,98.23,99.39,99.79,5715.97,120527.93,8760.0,0.31,603862369.55,100.0,100.0,8760.0,374569.08,374569.08,98.47,68934.06,68934.06,50424.97,50424.97,7819.64,7819.64,36.89,68.09,83.61,90.7,94.51,96.84,98.09,98.95,99.39,27513.43,88662.93,8760.0,374569.08,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.74,82.43,7221.0 -129,simulated,6B,2004.0,OutPatientHealthCare,Great Falls,4000,DOE,1.0,515894305.52,89.76,7863.0,100.0,344155.58,344155.58,90.47,58892.04,65610.37,28231.53,32607.09,0.0,15.81,56.91,66.32,78.14,87.42,92.26,95.45,97.81,98.89,99.74,13911.27,94101.95,8760.0,0.41,517101969.58,100.0,100.0,8760.0,355486.73,355486.73,93.45,59029.91,59029.91,46071.57,46071.57,6650.47,6650.47,36.54,73.01,88.6,94.21,96.55,97.95,98.68,99.26,99.61,27296.9,73858.38,8760.0,355486.73,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.03,89.76,7863.0 -130,simulated,4A,2022.0,OfficeLarge,New York,46000,DOE,0.1,1833528040.46,47.9,4196.0,100.0,1869087.96,1869087.96,40.35,209306.85,436970.46,0.0,228517.04,0.0,0.01,74.52,80.87,84.84,87.9,90.56,92.41,94.47,98.82,99.84,0.0,198806.26,8760.0,0.01,189415904.29,100.0,32.49,2846.0,1326991.49,1326991.49,28.65,21622.82,66555.13,0.0,18437.67,0.0,0.01,94.59,98.26,99.36,99.66,99.83,99.92,99.97,99.97,99.98,0.0,2607.67,8760.0,1326991.49,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.71,8.93,782.0 -131,simulated,6A,2004.0,HotelLarge,Rochester,11000,DOE,0.86,1163855675.05,63.46,5559.0,100.0,861486.85,861486.85,75.93,132860.24,209364.22,9507.48,117625.47,0.0,347.97,65.97,71.55,75.88,80.58,86.11,91.94,97.05,99.35,99.83,0.0,237386.36,8760.0,0.14,1004389591.43,100.0,99.95,8756.0,944095.47,944095.47,83.21,114656.35,114708.72,68889.89,68954.48,0.0,8.08,61.28,84.37,92.1,96.02,97.73,97.91,97.98,98.05,98.58,35981.02,143139.89,8760.0,944095.47,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.1,63.41,5555.0 -132,simulated,3C,2022.0,OutPatientHealthCare,San Jose,4000,DOE,0.19,534641785.89,100.0,8760.0,100.0,281513.87,281513.87,74.0,61032.17,61032.17,39539.96,39539.96,4371.78,4371.78,36.54,63.24,77.24,83.94,88.32,93.12,96.55,98.78,99.79,23123.35,79032.02,8760.0,0.96,102911272.39,100.0,100.0,8760.0,91255.77,91255.77,23.99,11747.86,11747.86,8602.92,8602.92,3644.12,3644.12,53.69,84.26,93.5,97.27,98.74,99.43,99.73,99.87,99.95,5969.66,14072.62,8760.0,78259.32,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.32,100.0,8760.0 -133,simulated,3B,2022.0,Hospital,El Paso,22000,DOE,0.23,4142630983.72,100.0,8760.0,100.0,1604280.15,1604280.15,71.5,472903.08,472903.08,425106.18,425106.18,24222.76,24222.76,24.85,41.22,54.1,69.67,81.23,88.11,94.59,99.75,99.93,161322.96,696553.89,8760.0,0.87,956917384.19,100.0,100.0,8760.0,289923.48,289923.48,12.92,109237.14,109237.14,103302.02,103302.02,30602.62,30602.62,0.0,6.4,31.64,62.88,83.12,92.72,97.56,99.35,99.92,80844.04,129834.51,8760.0,254532.93,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.18,100.0,8760.0 -134,simulated,4B,2022.0,HotelLarge,Albuquerque,11000,DOE,0.19,749730550.56,90.51,7929.0,100.0,371378.0,371378.0,32.73,85585.68,94555.5,33983.79,47556.78,0.0,62.06,51.61,60.15,66.29,72.79,79.99,87.9,93.58,96.75,99.25,7031.69,159558.45,8760.0,0.13,141239085.27,100.0,49.12,4303.0,127746.0,127746.0,11.26,16123.18,32823.4,0.0,23004.63,0.0,0.0,71.22,76.5,81.11,85.45,89.34,92.98,96.26,98.68,99.82,0.0,21664.43,8760.0,127746.0,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.34,39.69,3477.0 -135,simulated,3C,2004.0,HotelLarge,San Francisco,11000,DOE,0.74,844422148.97,82.63,7238.0,100.0,723828.89,723828.89,63.8,96395.22,116665.12,59102.79,83130.13,0.0,355.68,54.95,75.39,86.44,92.84,96.26,98.28,99.35,99.76,99.97,9612.52,142808.05,8760.0,0.43,623314598.63,100.0,100.0,8760.0,309230.96,309230.96,27.26,71154.63,71154.63,57688.57,57688.57,956.98,956.98,17.0,55.51,77.18,86.58,91.93,95.27,97.52,98.87,99.69,39008.16,87460.34,8760.0,309230.96,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.43,82.63,7238.0 -136,simulated,1A,2022.0,Hospital,Miami,22000,DOE,0.11,8578318421.81,100.0,8760.0,100.0,1761045.76,1761045.76,78.49,979260.09,979260.09,905009.57,905009.57,201494.68,201494.68,0.0,0.34,4.83,18.79,45.83,67.72,76.14,85.79,96.16,755354.57,1216793.28,8760.0,1.0,970627281.59,100.0,100.0,8760.0,234968.54,234968.54,10.47,110802.2,110802.2,113087.03,113087.03,45162.06,45162.06,0.0,0.08,11.27,31.52,54.98,84.33,96.63,99.57,99.95,87385.44,132537.16,8760.0,-88858.1,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.13,100.0,8760.0 -137,simulated,3A,2004.0,HotelLarge,Atlanta,11000,DOE,0.16,2435573424.17,82.19,7200.0,100.0,804499.78,804499.78,70.91,278033.5,338274.09,238687.88,352418.76,0.0,1034.87,36.95,44.2,50.19,56.38,63.14,70.5,79.75,91.0,99.1,11183.11,524084.45,8760.0,0.47,401043231.34,100.0,96.84,8483.0,262577.49,262577.49,23.14,45781.19,47276.11,37147.69,38353.16,0.0,0.81,35.92,65.75,82.84,92.39,97.2,99.05,99.79,99.91,99.98,19737.13,65199.52,8760.0,262577.49,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.33,79.03,6923.0 -138,simulated,2B,2022.0,OfficeLarge,Tucson,46000,DOE,0.01,3420414097.93,72.47,6348.0,100.0,3111054.23,3111054.23,67.16,390458.23,538817.6,164232.64,339737.67,0.0,0.08,61.85,72.88,79.93,91.62,98.82,99.98,99.99,99.99,99.99,0.0,707197.08,8760.0,0.04,19322915.79,100.0,8.39,735.0,338504.89,338504.89,7.31,2205.81,26289.68,0.0,4285.77,0.0,0.01,98.14,98.94,99.32,99.6,99.75,99.84,99.87,99.93,99.97,0.0,0.0,8760.0,338504.89,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.11,3.47,304.0 -139,simulated,3A,2004.0,OutPatientHealthCare,Sacramento,4000,DOE,0.32,1067380857.43,99.99,8759.0,100.0,462835.61,462835.61,121.67,121847.13,121861.04,97952.47,97955.62,0.0,97.03,7.07,45.15,72.67,83.46,88.9,93.3,96.75,98.71,99.69,69755.27,145867.6,8760.0,0.93,341234174.53,100.0,100.0,8760.0,172083.16,172083.16,45.24,38953.67,38953.67,33311.83,33311.83,7538.73,7538.73,15.39,51.96,75.88,88.48,95.27,98.13,99.35,99.78,99.94,21236.14,50924.18,8760.0,168338.83,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.37,99.99,8759.0 -140,simulated,5C,2004.0,OutPatientHealthCare,Port Angeles,4000,DOE,0.87,474460145.15,99.81,8743.0,100.0,290396.27,290396.27,76.34,54162.12,54267.43,30307.44,30344.73,0.0,19.41,46.89,71.11,77.65,86.23,91.84,95.23,97.8,99.38,99.91,20974.7,77532.51,8760.0,0.66,415044319.3,100.0,100.0,8760.0,192427.41,192427.41,50.59,47379.49,47379.49,42478.14,42478.14,9053.99,9053.99,6.93,43.14,71.97,88.31,95.78,98.45,99.43,99.89,99.99,29433.73,60383.22,8760.0,192427.41,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.66,99.81,8743.0 -141,simulated,5A,2022.0,OfficeLarge,Chicago,46000,DOE,0.17,1762595014.54,45.81,4013.0,100.0,4232953.32,4232953.32,91.38,201209.48,439221.28,0.0,216092.81,0.0,0.01,83.14,89.43,94.86,99.73,99.94,99.98,99.98,99.98,99.99,0.0,149688.73,8760.0,0.01,291414865.8,100.0,33.33,2920.0,1751228.21,1751228.21,37.81,33266.54,99799.61,0.0,34074.95,0.0,0.01,93.55,97.92,99.25,99.59,99.75,99.9,99.93,99.97,99.98,0.0,4341.12,8760.0,1751228.21,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.41,7.11,623.0 -142,simulated,4B,2022.0,Hospital,Albuquerque,22000,DOE,0.32,3116644768.84,100.0,8760.0,100.0,1262239.06,1262239.06,56.26,355781.37,355781.37,266639.34,266639.34,8953.53,8953.53,32.71,48.39,61.69,72.64,80.78,86.48,90.32,93.57,98.79,72715.4,540626.68,8760.0,0.74,1010620423.71,100.0,100.0,8760.0,289738.45,289738.45,12.91,115367.63,115367.63,105303.84,105303.84,19997.68,19997.68,0.03,7.17,32.1,59.71,76.26,86.45,93.37,97.9,99.73,80119.94,142257.98,8760.0,272171.87,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.23,100.0,8760.0 -143,simulated,3B,2004.0,OutPatientHealthCare,Los Angeles,4000,DOE,0.25,1279816006.3,99.94,8755.0,100.0,362448.96,362448.96,95.28,146097.72,146181.15,127667.3,127693.14,0.0,784.69,6.55,14.89,36.45,59.99,73.05,81.6,87.59,91.67,95.7,93408.8,189164.49,8760.0,0.95,317166444.75,100.0,100.0,8760.0,261577.3,261577.3,68.76,36206.22,36206.22,31576.69,31576.69,439.32,439.32,34.76,82.67,95.57,99.14,99.86,99.97,99.97,99.98,99.98,22587.16,45075.7,8760.0,261577.3,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.72,99.94,8755.0 -144,simulated,3A,2022.0,OfficeLarge,Sacramento,46000,DOE,0.04,1837891490.85,52.09,4563.0,100.0,2490189.04,2490189.04,53.76,209804.96,402781.39,604.11,220839.6,0.0,0.01,75.25,83.7,88.98,92.45,95.11,98.86,99.37,99.65,99.84,0.0,243938.05,8760.0,0.08,65472375.7,100.0,25.55,2238.0,1018351.64,1018351.64,21.98,7474.02,29254.86,0.0,6439.53,0.0,0.01,97.67,99.49,99.83,99.93,99.95,99.97,99.97,99.98,99.98,0.0,1.46,8760.0,1018351.64,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.41,11.36,995.0 -145,simulated,4A,2004.0,OutPatientHealthCare,New York,4000,DOE,0.42,1017427771.55,97.6,8550.0,100.0,521492.84,521492.84,137.09,116144.72,118997.4,83988.94,86589.34,0.0,17.07,32.24,57.96,74.76,84.9,89.6,92.9,95.92,98.34,99.46,43673.46,157351.14,8760.0,0.71,428352165.72,100.0,100.0,8760.0,283611.69,283611.69,74.56,48898.65,48898.65,40813.73,40813.73,8243.49,8243.49,32.33,67.95,87.57,95.27,98.03,99.14,99.65,99.9,99.97,23981.76,64472.61,8760.0,283611.69,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.54,97.6,8550.0 -146,simulated,5B,2004.0,Hospital,Denver,22000,DOE,0.5,4331767536.49,97.82,8569.0,100.0,2277542.24,2277542.24,101.51,494494.01,505516.11,323175.56,332290.18,0.0,0.02,33.57,56.5,59.52,84.84,94.59,99.27,99.86,99.94,99.98,181422.51,782640.09,8760.0,0.76,2145382331.75,100.0,100.0,8760.0,816059.59,816059.59,36.37,244906.66,244906.66,225992.37,225992.37,29841.3,29841.3,0.75,20.27,58.26,81.94,93.94,97.98,98.9,99.3,99.77,174663.13,299234.68,8760.0,816059.59,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.36,97.82,8569.0 -147,simulated,6A,2022.0,OutPatientHealthCare,Rochester,4000,DOE,0.64,432594830.63,83.45,7310.0,100.0,384868.98,384868.98,101.17,49382.97,59178.5,20329.73,28776.25,0.0,13.09,62.81,78.24,87.07,90.67,93.9,96.08,98.07,99.36,99.82,3941.34,68488.33,8760.0,0.27,278792864.97,100.0,100.0,8760.0,258282.85,258282.85,67.9,31825.67,31825.67,15169.28,15169.28,3255.84,3255.84,64.61,80.64,89.11,93.64,96.19,97.75,98.7,99.11,99.55,7355.15,40174.95,8760.0,258282.85,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.67,83.45,7310.0 -148,simulated,3C,2022.0,OfficeLarge,San Jose,46000,DOE,0.05,1130220861.92,51.85,4542.0,100.0,1446250.21,1446250.21,31.22,129020.65,248837.71,283.04,110263.46,0.0,0.03,76.61,84.33,89.19,92.26,94.27,95.48,97.85,99.17,99.85,0.0,122036.29,8760.0,0.03,60032601.03,100.0,16.99,1488.0,409109.79,409109.79,8.83,6853.04,40344.49,0.0,9733.34,0.0,0.01,94.78,96.89,98.33,99.09,99.5,99.69,99.78,99.89,99.95,0.0,0.0,8760.0,409109.79,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.28,6.56,575.0 -149,simulated,5B,2004.0,OfficeLarge,Denver,46000,DOE,0.42,2670857139.68,51.12,4478.0,100.0,2014872.54,2014872.54,43.5,304892.37,596439.74,0.11,546341.6,0.0,0.01,60.49,67.32,77.33,85.27,89.98,93.03,97.85,99.29,99.91,0.0,557230.18,8760.0,0.02,1115559137.83,100.0,50.9,4459.0,2244176.58,2244176.58,48.45,127346.93,250181.46,124.37,114357.21,0.0,2.62,80.91,89.57,94.57,97.35,98.56,99.38,99.71,99.93,99.98,0.0,120455.43,8760.0,2244176.58,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,1.11,15.26,1337.0 -150,simulated,4B,2022.0,OutPatientHealthCare,Albuquerque,4000,DOE,0.18,569449553.48,99.74,8737.0,100.0,276410.19,276410.19,72.66,65005.66,65176.78,45608.95,45836.29,0.0,17.97,40.18,57.08,74.37,81.15,85.35,88.63,92.27,95.57,98.72,15502.98,84891.59,8760.0,0.8,101778222.51,100.0,100.0,8760.0,116690.94,116690.94,30.68,11618.52,11618.52,7674.62,7674.62,2552.05,2552.05,69.6,89.82,95.55,97.58,98.76,99.42,99.76,99.87,99.95,5051.66,13496.23,8760.0,116690.94,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.42,99.74,8737.0 -151,simulated,2A,2022.0,OfficeLarge,Tampa,46000,DOE,0.0,4375897608.64,77.32,6773.0,100.0,2373320.75,2373320.75,51.24,499531.69,646079.67,310604.34,511250.51,0.0,0.01,47.05,59.39,68.5,75.18,81.7,89.02,98.82,99.79,99.95,6678.08,945030.74,8760.0,0.08,16149298.8,100.0,8.17,716.0,348364.85,348364.85,7.52,1843.53,22554.89,0.0,4093.06,0.0,0.01,98.65,99.21,99.46,99.69,99.81,99.91,99.95,99.97,99.99,0.0,0.0,8760.0,348364.85,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.15,4.53,397.0 -152,simulated,3B,2004.0,HotelLarge,El Paso,11000,DOE,0.21,2180328719.06,87.59,7673.0,100.0,886074.96,886074.96,78.1,248895.97,284155.96,207628.8,274364.99,0.0,791.15,37.59,47.18,55.39,64.55,74.54,85.02,94.55,98.87,99.83,19611.71,446634.76,8760.0,0.26,467997087.22,100.0,99.3,8699.0,354236.72,354236.72,31.22,53424.33,53798.95,19504.88,19677.49,0.0,0.02,65.08,76.88,81.89,86.54,90.42,93.52,96.03,97.8,99.12,7851.44,61111.06,8760.0,354236.72,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.4,86.89,7612.0 -153,simulated,5B,2004.0,OutPatientHealthCare,Denver,4000,DOE,0.58,658411974.68,95.68,8382.0,100.0,339523.36,339523.36,89.25,75161.18,78550.7,36622.84,41437.47,0.0,14.39,47.92,56.08,68.85,80.88,87.19,91.34,95.3,98.39,99.83,18043.72,117149.18,8760.0,0.53,382719592.87,100.0,100.0,8760.0,306823.26,306823.26,80.66,43689.45,43689.45,34795.28,34795.28,6708.3,6708.3,43.78,78.12,91.7,97.17,98.69,99.41,99.76,99.9,99.95,20301.44,56738.67,8760.0,306823.26,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.9,95.68,8382.0 -154,simulated,5A,2022.0,Hospital,Chicago,22000,DOE,0.49,3273044858.65,99.74,8737.0,100.0,1707438.52,1707438.52,76.1,373635.26,374618.85,221549.54,223011.1,0.0,465.29,44.95,61.71,70.11,77.66,86.24,91.06,94.61,98.28,99.83,68564.84,618857.79,8760.0,0.6,1592899076.71,100.0,100.0,8760.0,966324.23,966324.23,43.07,181837.79,181837.79,158486.27,158486.27,63665.69,63665.69,8.0,66.26,89.42,97.1,99.3,99.67,99.73,99.92,99.94,122766.07,219788.8,8760.0,966324.23,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.57,99.74,8737.0 -155,simulated,4A,2004.0,OfficeLarge,New York,46000,DOE,0.29,4208928886.04,91.88,8049.0,100.0,3046976.03,3046976.03,65.78,480471.33,522913.27,252205.65,310987.03,0.0,0.79,53.62,71.61,81.92,86.86,89.65,95.33,98.16,99.27,99.81,31330.16,687481.17,8760.0,0.25,1201042625.54,100.0,49.0,4292.0,2602994.89,2602994.89,56.2,137105.32,279832.86,0.0,150111.28,0.0,1.05,80.5,90.24,95.64,98.24,99.36,99.79,99.93,99.99,99.99,0.0,142438.07,8760.0,2602994.89,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.85,40.99,3591.0 -156,simulated,3C,2022.0,OutPatientHealthCare,San Francisco,4000,DOE,0.22,478444618.16,100.0,8760.0,100.0,231573.21,231573.21,60.88,54616.97,54616.97,31747.19,31747.19,7559.47,7559.47,30.63,59.29,71.55,80.42,87.64,92.65,96.78,98.93,99.68,21742.44,77575.09,8760.0,0.98,105910310.03,100.0,100.0,8760.0,83470.74,83470.74,21.94,12090.22,12090.22,9214.65,9214.65,3717.24,3717.24,44.84,80.83,91.04,96.51,98.45,99.39,99.73,99.91,99.98,6264.49,14546.74,8760.0,65200.77,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.36,100.0,8760.0 -157,simulated,2A,2022.0,Hospital,Houston,22000,DOE,0.19,6335262979.67,100.0,8760.0,100.0,1774260.47,1774260.47,79.08,723203.54,723203.54,760436.46,760436.46,15041.27,15041.27,16.96,28.03,36.31,46.15,64.92,77.23,84.42,90.73,98.01,305360.44,1018419.51,8760.0,0.91,1195286169.59,100.0,100.0,8760.0,347360.08,347360.08,15.48,136448.19,136448.19,134407.98,134407.98,57356.9,57356.9,0.0,2.69,22.64,55.89,84.2,94.37,98.13,99.73,99.99,107132.81,158061.77,8760.0,316413.28,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.2,100.0,8760.0 -158,simulated,6A,2004.0,Hospital,Rochester,22000,DOE,0.7,4474243435.35,89.84,7870.0,100.0,3228257.83,3228257.83,143.89,510758.38,568518.86,294219.6,351398.84,0.0,51.13,52.99,62.9,76.89,92.89,98.11,99.49,99.7,99.79,99.9,112368.89,953164.8,8760.0,0.54,3141536455.01,100.0,100.0,8760.0,1358598.85,1358598.85,60.55,358622.88,358622.88,302799.1,302799.1,33048.43,33048.43,0.46,37.83,73.12,88.64,93.39,96.0,98.03,99.28,99.78,242148.4,421472.87,8760.0,1358598.85,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.42,89.84,7870.0 -159,simulated,3B,2004.0,Hospital,San Diego,22000,DOE,0.35,6539768673.17,100.0,8760.0,100.0,2480385.46,2480385.46,110.55,746548.94,746548.94,712504.91,712504.91,207815.72,207815.72,0.09,22.99,52.47,83.8,91.64,96.48,98.57,99.47,99.84,504749.14,860417.57,8760.0,1.0,2316776699.59,100.0,100.0,8760.0,432842.63,432842.63,19.29,264472.23,264472.23,269056.51,269056.51,68193.76,68193.76,0.0,0.15,1.34,6.47,25.71,45.51,69.67,91.46,99.2,214806.33,312284.74,8760.0,155755.0,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.17,100.0,8760.0 -160,simulated,4C,2022.0,HotelLarge,Seattle,11000,DOE,0.47,327816055.98,77.13,6757.0,100.0,383325.45,383325.45,33.79,37421.92,48515.03,8310.37,17979.09,0.0,110.41,73.23,82.8,88.73,92.47,95.68,97.71,99.01,99.45,99.85,551.07,43231.16,8760.0,0.08,154100480.76,100.0,77.47,6786.0,127963.72,127963.72,11.28,17591.38,22708.59,2318.97,9357.6,0.0,0.02,63.79,71.85,80.34,86.07,91.55,95.91,98.69,99.68,99.94,10.61,29804.66,8760.0,127794.46,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.33,54.61,4784.0 -161,simulated,3A,2022.0,HotelLarge,Sacramento,11000,DOE,0.11,815430558.71,88.78,7777.0,100.0,516146.43,516146.43,45.49,93085.68,104851.56,37479.89,53381.76,0.0,95.76,55.18,66.46,73.26,81.23,88.89,94.17,97.47,99.27,99.85,6338.63,168319.17,8760.0,0.17,85811753.72,100.0,64.3,5633.0,106465.73,106465.73,9.38,9795.86,15233.76,425.38,3744.82,0.0,0.0,76.86,84.01,88.24,91.26,93.95,96.11,97.69,99.06,99.93,0.0,8249.72,8760.0,106011.77,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.21,53.09,4651.0 -162,simulated,3B,2022.0,OfficeLarge,San Diego,46000,DOE,0.01,1496891125.89,58.06,5086.0,100.0,1825661.86,1825661.86,39.41,170877.98,294315.99,5965.22,169689.42,0.0,0.02,71.97,82.69,88.95,92.79,94.67,97.69,99.21,99.92,99.98,0.0,224908.2,8760.0,0.03,11507262.63,100.0,13.8,1209.0,228092.32,228092.32,4.92,1313.61,9518.0,0.0,203.12,0.0,0.0,98.32,99.08,99.47,99.71,99.89,99.94,99.95,99.98,99.99,0.0,0.0,8760.0,228092.32,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.12,8.89,779.0 -163,simulated,7,2022.0,HotelLarge,International Falls,11000,DOE,1.01,470551168.78,73.45,6434.0,100.0,513844.11,513844.11,45.29,53715.89,73135.09,4000.08,18808.63,0.0,55.38,73.8,81.0,86.0,90.53,93.49,96.02,98.0,99.26,99.82,0.0,57226.39,8760.0,0.03,474907166.08,100.0,75.14,6582.0,612713.85,612713.85,54.01,54213.15,72152.41,19441.93,39903.76,0.0,0.0,73.38,90.83,94.81,95.3,95.54,95.74,96.29,98.08,99.47,0.02,65219.34,8760.0,612713.85,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,1.19,48.62,4259.0 -164,simulated,3C,2004.0,OutPatientHealthCare,San Francisco,4000,DOE,0.45,807403480.73,100.0,8760.0,100.0,302206.85,302206.85,79.44,92169.35,92169.35,87887.23,87887.23,13408.13,13408.13,12.99,32.26,52.36,73.62,85.32,92.12,96.96,98.93,99.7,39177.53,123904.1,8760.0,0.9,365470893.59,100.0,100.0,8760.0,150985.65,150985.65,39.69,41720.42,41720.42,36783.11,36783.11,9800.53,9800.53,3.76,32.64,66.32,83.08,92.43,96.87,98.76,99.58,99.85,27300.28,51711.31,8760.0,126265.06,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.5,100.0,8760.0 -165,simulated,2A,2004.0,OutPatientHealthCare,Houston,4000,DOE,0.17,1742004256.36,99.97,8757.0,100.0,548639.98,548639.98,144.23,198858.93,198927.06,167103.42,167201.45,0.0,15.57,7.83,27.17,48.56,68.23,77.1,81.94,86.68,92.1,97.99,104316.25,256750.68,8760.0,0.94,296057175.5,100.0,100.0,8760.0,189749.79,189749.79,49.88,33796.48,33796.48,27543.45,27543.45,3621.77,3621.77,27.19,68.89,86.85,94.39,97.57,99.04,99.65,99.9,99.97,18114.17,42703.84,8760.0,189749.79,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.35,99.97,8757.0 -166,simulated,2B,2004.0,OfficeLarge,Tucson,46000,DOE,0.05,5919525536.17,75.32,6598.0,100.0,2697714.39,2697714.39,58.24,675744.92,897169.68,535260.08,762395.77,0.0,0.01,37.49,50.22,64.68,73.93,79.63,86.13,93.76,97.57,99.58,0.15,1115020.87,8760.0,0.36,280642947.36,100.0,26.55,2326.0,1497679.64,1497679.64,32.33,32036.87,120654.75,0.0,73818.94,0.0,2.11,92.24,96.86,99.14,99.67,99.89,99.94,99.98,99.98,99.99,0.0,464.95,8760.0,1497679.32,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.56,21.2,1857.0 -167,simulated,5B,2022.0,HotelLarge,Denver,11000,DOE,0.37,551415046.61,83.93,7352.0,100.0,358527.33,358527.33,31.6,62946.92,75002.05,18807.61,32367.2,0.0,70.36,59.73,68.82,75.32,80.54,85.51,91.78,96.14,98.54,99.75,1852.22,105549.74,8760.0,0.1,202453509.52,100.0,60.14,5268.0,167902.27,167902.27,14.8,23111.13,38430.81,547.24,32886.42,0.0,0.0,60.3,70.39,79.55,86.45,92.53,97.17,99.55,99.9,99.98,0.0,41019.36,8760.0,167684.14,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.47,44.13,3866.0 -168,simulated,6A,2022.0,OfficeLarge,Rochester,46000,DOE,0.49,1268803252.44,37.93,3323.0,100.0,2097179.17,2097179.17,45.28,144840.55,381824.63,0.0,147379.18,0.0,0.0,82.89,87.93,90.75,93.0,94.54,95.63,98.62,99.73,99.93,0.0,24234.17,8760.0,0.0,621757517.17,100.0,44.21,3873.0,2160634.44,2160634.44,46.65,70976.89,160536.41,0.0,64244.04,0.0,0.01,89.47,95.78,97.97,98.76,99.11,99.47,99.78,99.89,99.94,0.0,43605.89,8760.0,2160634.44,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.03,7.02,615.0 -169,simulated,2A,2004.0,HotelLarge,Houston,11000,DOE,0.1,3671002761.36,91.95,8055.0,100.0,945857.21,945857.21,83.37,419064.24,455742.12,491386.29,527128.62,0.0,584.39,23.98,29.69,34.53,40.86,48.41,59.22,74.51,88.71,99.1,114782.91,665948.2,8760.0,0.56,363520217.86,100.0,94.09,8242.0,215326.85,215326.85,18.98,41497.74,44105.83,27755.53,30933.91,0.0,2.76,42.63,63.41,76.63,85.78,91.37,95.5,97.9,99.51,99.89,11598.7,61170.6,8760.0,215326.85,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.23,86.04,7537.0 -170,simulated,4C,2004.0,Hospital,Seattle,22000,DOE,0.63,4159378904.45,100.0,8760.0,100.0,1677081.41,1677081.41,74.75,474814.94,474814.94,418273.38,418273.38,67599.77,67599.77,1.99,35.06,65.79,81.34,92.32,95.89,98.2,99.38,99.92,293995.27,592634.62,8760.0,0.94,2614315120.13,100.0,100.0,8760.0,535256.35,535256.35,23.86,298437.8,298437.8,295391.89,295391.89,119720.09,119720.09,0.0,0.0,0.53,10.39,34.6,64.29,85.89,97.32,99.75,248705.76,345717.75,8760.0,442528.98,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.32,100.0,8760.0 -171,simulated,1A,2004.0,OutPatientHealthCare,Miami,4000,DOE,0.1,2147311291.8,100.0,8760.0,100.0,526172.16,526172.16,138.32,245126.86,245126.86,204915.5,204915.5,38945.75,38945.75,0.14,7.32,25.26,52.13,65.43,71.28,78.61,87.6,95.83,157344.05,343833.04,8760.0,1.0,212489226.6,100.0,100.0,8760.0,122503.27,122503.27,32.2,24256.76,24256.76,20488.26,20488.26,7738.18,7738.18,12.21,63.62,85.14,94.36,97.68,99.16,99.74,99.89,99.95,15042.68,29808.92,8760.0,52927.63,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.23,100.0,8760.0 -172,simulated,2A,2004.0,OfficeLarge,Tampa,46000,DOE,0.02,9867587028.18,99.7,8734.0,100.0,3430781.62,3430781.62,74.07,1126436.88,1129790.13,1146090.67,1151275.16,0.0,9.52,25.16,35.71,46.79,59.06,70.02,86.94,94.27,98.4,99.9,337796.61,1871261.54,8760.0,0.4,217511749.99,100.0,23.05,2019.0,1667265.09,1667265.09,35.99,24830.11,107732.42,0.0,36950.92,0.0,1.79,95.24,97.97,99.03,99.57,99.77,99.9,99.98,99.98,99.99,0.0,0.0,8760.0,1667265.09,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.49,22.75,1993.0 -173,simulated,7,2004.0,Hospital,International Falls,22000,DOE,0.92,3737796186.8,81.78,7164.0,100.0,3254122.28,3254122.28,145.04,426689.06,521747.09,250148.71,329020.36,0.0,0.0,58.9,68.42,87.16,95.7,98.98,99.67,99.78,99.92,99.95,56965.27,845485.92,8760.0,0.45,3454257495.8,100.0,100.0,8760.0,1282132.07,1282132.07,57.15,394321.63,394321.63,317476.86,317476.86,16077.66,16077.66,0.4,28.15,64.38,79.17,86.03,91.61,95.18,98.01,99.5,246743.95,469764.35,8760.0,1282132.07,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.39,81.78,7164.0 -174,simulated,3C,2004.0,Hospital,San Francisco,22000,DOE,0.5,5031527719.44,100.0,8760.0,100.0,1496173.59,1496173.59,66.69,574375.31,574375.31,527449.49,527449.49,223781.0,223781.0,0.0,2.01,29.35,63.76,80.7,94.05,97.5,99.04,99.68,434144.37,664721.0,8760.0,1.0,2511941043.29,100.0,100.0,8760.0,442501.48,442501.48,19.72,286751.26,286751.26,291988.36,291988.36,104887.17,104887.17,0.0,0.0,0.1,2.44,18.4,37.76,59.18,85.48,98.3,236016.47,334853.64,8760.0,128657.51,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.3,100.0,8760.0 -175,simulated,3A,2022.0,Hospital,Sacramento,22000,DOE,0.35,3570395379.31,100.0,8760.0,100.0,1506625.64,1506625.64,67.15,407579.38,407579.38,290007.12,290007.12,36783.51,36783.51,29.47,51.34,66.13,75.15,83.47,88.82,92.04,94.69,99.55,118912.72,600366.19,8760.0,0.84,1266810838.73,100.0,100.0,8760.0,290131.84,290131.84,12.93,144613.11,144613.11,138639.15,138639.15,43195.4,43195.4,0.0,0.08,8.63,29.41,56.05,75.5,87.99,95.23,99.14,110606.3,173030.2,8760.0,237246.65,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.19,100.0,8760.0 -176,simulated,7,2004.0,HotelLarge,International Falls,11000,DOE,1.42,916564691.15,56.85,4980.0,100.0,781378.58,781378.58,68.87,104630.67,184049.13,6221.82,98637.16,0.0,226.95,69.85,75.75,80.16,84.65,89.6,92.67,96.3,98.69,99.66,0.0,144825.35,8760.0,0.09,1303063057.8,100.0,100.0,8760.0,1006755.64,1006755.64,88.74,148751.49,148751.49,74831.55,74831.55,1.89,1.89,59.42,78.08,86.56,93.29,95.1,95.3,95.5,95.78,97.11,36319.64,175903.74,8760.0,1006755.64,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,1.29,56.85,4980.0 -214,simulated,4C,1996.0,Academic,Eureka,14000,DEER,4.48,138043049.23,93.01,8148.0,100.0,806098.9,806098.9,57.81,15758.34,16941.95,3288.03,4082.23,0.0,0.0,95.24,98.2,99.33,99.61,99.84,99.92,99.95,99.97,99.97,195.55,9878.25,8760.0,0.17,618379180.1,100.0,100.0,8760.0,658724.43,658724.43,47.24,70591.23,70591.23,24376.42,24376.42,613.55,613.55,64.46,72.5,93.32,96.6,98.48,99.3,99.68,99.85,99.92,9497.28,152290.12,8760.0,598878.76,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.82,93.01,8148.0 -215,simulated,4C,1996.0,Academic,Eureka,44000,DEER,2.29,565917311.11,98.38,8618.0,100.0,2110256.55,2110256.55,47.82,64602.43,65666.9,18762.39,19386.3,0.0,0.0,91.5,97.39,98.7,99.41,99.65,99.86,99.95,99.95,99.95,8305.74,52184.82,8760.0,0.29,1294350869.17,100.0,100.0,8760.0,1211951.85,1211951.85,27.47,147756.95,147756.95,102485.48,102485.48,9752.92,9752.92,52.89,78.94,92.19,96.06,98.13,99.02,99.51,99.84,99.95,21941.49,219477.69,8760.0,946083.04,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.57,98.38,8618.0 -216,simulated,4C,1996.0,Hospital,Eureka,23000,DEER,3.07,172184383.77,86.53,7580.0,100.0,859948.76,859948.76,37.02,19655.75,22715.62,3725.9,4305.67,0.0,0.33,94.09,97.95,99.06,99.52,99.75,99.9,99.94,99.95,99.97,1755.36,6825.5,8760.0,0.23,528979088.37,100.0,100.0,8760.0,474302.4,474302.4,20.42,60385.74,60385.74,58870.48,58870.48,3335.51,3335.51,44.92,85.01,93.68,97.04,98.45,99.2,99.54,99.79,99.9,21920.27,75198.59,8760.0,443291.01,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.55,86.53,7580.0 -217,simulated,4C,1996.0,Manufacturing,Eureka,19000,DEER,33.36,107623129.29,98.07,8591.0,100.0,864241.25,864241.25,46.51,12285.75,12527.43,5760.54,5837.58,0.0,0.0,98.55,99.7,99.87,99.93,99.94,99.95,99.95,99.97,99.98,4029.38,9829.76,8760.0,0.03,3589862994.15,100.0,100.0,8760.0,1353366.17,1353366.17,72.84,409801.71,409801.71,374589.39,374589.39,5429.51,5429.51,12.82,29.75,55.4,72.13,85.56,93.82,97.67,99.17,99.75,238761.62,567300.8,8760.0,1339951.4,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,1.57,98.07,8591.0 -218,simulated,4C,1996.0,OfficeLarge,Eureka,16000,DEER,2.79,145892076.21,23.74,2080.0,100.0,831072.48,831072.48,51.12,16654.35,70140.42,0.0,40216.08,0.0,9.41,93.42,97.2,98.76,99.41,99.67,99.87,99.93,99.95,99.95,0.0,0.0,8760.0,0.13,406417423.0,100.0,100.0,8760.0,503988.95,503988.95,31.0,46394.68,46394.68,22994.5,22994.5,2412.52,2412.52,74.63,86.64,92.56,95.76,97.4,98.33,99.22,99.57,99.85,5887.63,51723.64,8760.0,479391.91,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.61,23.74,2080.0 -219,simulated,3C,1996.0,Academic,Napa,14000,DEER,0.6,919862120.67,95.16,8336.0,100.0,1259585.05,1259585.05,90.33,105007.09,110348.14,4717.09,5740.89,0.0,0.0,80.42,87.69,89.74,91.22,92.84,95.58,98.12,99.36,99.84,1145.43,74599.78,8760.0,0.41,552746192.56,100.0,100.0,8760.0,757584.45,757584.45,54.33,63098.88,63098.88,23177.31,23177.31,612.68,612.68,69.28,87.5,96.44,98.38,99.17,99.58,99.83,99.92,99.98,9069.05,111902.62,8760.0,757432.05,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.6,95.16,8336.0 -220,simulated,3C,1996.0,Academic,Napa,44000,DEER,0.38,2968521926.97,99.0,8672.0,100.0,3193253.45,3193253.45,72.37,338872.37,342311.11,36237.85,37390.02,0.0,0.0,75.29,83.13,87.29,89.53,91.56,94.11,96.91,99.14,99.93,12029.13,314713.35,8760.0,0.49,1123691042.7,100.0,100.0,8760.0,1234809.83,1234809.83,27.98,128275.23,128275.23,84960.32,84960.32,8891.74,8891.74,59.01,85.58,94.67,97.21,98.47,99.2,99.59,99.76,99.95,20359.02,187601.72,8760.0,1050647.16,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.39,99.0,8672.0 -221,simulated,3C,1996.0,Hospital,Napa,23000,DEER,0.43,1179832130.57,87.71,7683.0,100.0,1318414.13,1318414.13,56.76,134684.03,153563.99,5562.28,9144.92,0.0,4.97,77.75,84.44,87.08,89.17,90.83,93.77,96.92,99.32,99.91,2400.31,105116.04,8760.0,0.44,508032569.49,100.0,100.0,8760.0,579442.73,579442.73,24.95,57994.59,57994.59,49949.47,49949.47,3068.59,3068.59,54.22,89.39,95.31,97.44,98.57,99.29,99.74,99.87,99.95,14910.0,71093.9,8760.0,501895.22,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.44,87.71,7683.0 -222,simulated,3C,1996.0,Manufacturing,Napa,19000,DEER,3.08,904011447.64,98.6,8637.0,100.0,1543140.89,1543140.89,83.05,103197.65,104667.3,8272.24,8499.75,0.0,0.0,84.9,88.31,90.98,93.66,96.0,97.81,99.09,99.63,99.91,4833.48,52059.01,8760.0,0.06,2784578679.1,100.0,100.0,8760.0,1497548.56,1497548.56,80.6,317874.28,317874.28,268962.17,268962.17,4379.22,4379.22,36.82,54.03,70.67,82.03,91.27,96.5,98.74,99.62,99.9,44575.06,503871.68,8760.0,1485107.31,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.97,98.6,8637.0 -223,simulated,3C,1996.0,OfficeLarge,Napa,16000,DEER,0.31,1180455151.99,43.54,3814.0,100.0,1240594.84,1240594.84,76.32,134755.15,309505.81,0.0,157724.5,0.0,19.87,76.03,82.59,86.89,88.9,90.34,91.8,94.81,98.4,99.76,0.0,111516.14,8760.0,0.31,368727600.32,100.0,100.0,8760.0,537200.94,537200.94,33.05,42092.19,42092.19,20911.21,20911.21,2234.91,2234.91,78.08,90.1,94.41,96.27,97.67,98.71,99.41,99.71,99.85,4695.88,44801.93,8760.0,524025.23,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.43,43.54,3814.0 -224,simulated,3C,1996.0,Academic,Oakland,14000,DEER,0.93,505692108.88,95.35,8353.0,100.0,1034721.98,1034721.98,74.21,57727.41,60540.18,5631.56,6294.53,0.0,0.0,83.18,91.28,95.22,97.1,97.95,98.54,99.12,99.61,99.83,765.62,49505.0,8760.0,0.44,467777033.57,100.0,100.0,8760.0,692705.21,692705.21,49.68,53399.2,53399.2,14483.88,14483.88,611.98,611.98,72.25,78.79,98.05,99.34,99.69,99.89,99.95,99.98,99.99,8677.51,87888.7,8760.0,691914.92,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.67,95.35,8353.0 -225,simulated,3C,1996.0,Academic,Oakland,44000,DEER,0.52,1751025861.12,98.94,8667.0,100.0,2769488.49,2769488.49,62.76,199888.8,202033.67,34520.45,35386.54,0.0,0.0,78.96,88.23,93.24,95.74,97.58,98.33,99.12,99.6,99.87,11629.74,200065.29,8760.0,0.53,911948324.62,100.0,100.0,8760.0,919700.02,919700.02,20.84,104103.69,104103.69,72104.89,72104.89,8934.47,8934.47,59.33,79.25,95.33,97.71,98.8,99.36,99.66,99.84,99.94,19909.21,173967.9,8760.0,918675.95,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.33,98.94,8667.0 -226,simulated,3C,1996.0,Hospital,Oakland,23000,DEER,0.62,633974443.96,87.95,7704.0,100.0,1074087.56,1074087.56,46.24,72371.51,82291.59,5253.96,6991.71,0.0,0.03,81.29,89.37,93.37,95.45,97.17,97.95,98.53,99.29,99.79,2282.18,67966.7,8760.0,0.39,392343155.75,100.0,100.0,8760.0,494387.54,494387.54,21.29,44788.03,44788.03,34921.8,34921.8,3070.77,3070.77,56.93,92.68,97.2,98.86,99.43,99.73,99.82,99.94,99.99,8515.32,66402.61,8760.0,434645.39,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.46,87.95,7704.0 -227,simulated,3C,1996.0,Manufacturing,Oakland,19000,DEER,5.46,391701320.87,98.28,8609.0,100.0,1278942.63,1278942.63,68.83,44714.76,45499.05,7484.96,7675.12,0.0,0.0,91.92,95.54,97.48,98.52,99.11,99.51,99.71,99.91,99.97,4848.31,30745.87,8760.0,0.06,2136734059.15,100.0,100.0,8760.0,1172944.22,1172944.22,63.13,243919.41,243919.41,188782.76,188782.76,4220.43,4220.43,37.98,57.41,71.2,82.41,91.39,96.58,98.68,99.54,99.87,40023.58,392211.75,8760.0,1158214.15,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.92,98.28,8609.0 -228,simulated,3C,1996.0,OfficeLarge,Oakland,16000,DEER,0.42,644202391.7,43.39,3801.0,100.0,1029725.41,1029725.41,63.34,73539.09,169482.34,0.0,95043.4,0.0,11.31,79.26,87.55,92.34,95.15,96.66,97.69,98.22,98.86,99.65,0.0,67666.7,8760.0,0.24,268190965.51,100.0,100.0,8760.0,473485.66,473485.66,29.13,30615.41,30615.41,16593.13,16593.13,2240.71,2240.71,83.87,92.41,96.19,98.16,98.94,99.35,99.62,99.86,99.95,4309.9,31180.91,8760.0,473485.66,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.46,43.39,3801.0 -229,simulated,3C,1996.0,Academic,San Jose,14000,DEER,0.37,1389938680.15,96.02,8411.0,100.0,1433719.49,1433719.49,102.82,158668.8,165252.49,10580.6,13718.14,0.0,0.0,75.01,82.75,86.05,87.32,90.07,93.73,97.16,99.35,99.94,1706.35,143225.38,8760.0,0.51,519090672.69,100.0,100.0,8760.0,758888.6,758888.6,54.42,59256.93,59256.93,20980.95,20980.95,610.66,610.66,69.7,89.46,97.16,98.55,99.43,99.76,99.89,99.93,99.99,8882.16,104403.66,8760.0,758888.59,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.53,96.02,8411.0 -230,simulated,3C,1996.0,Academic,San Jose,44000,DEER,0.25,4248815742.31,99.29,8698.0,100.0,3586148.04,3586148.04,81.27,485024.63,488481.92,72935.77,74896.83,0.0,0.0,69.59,77.75,82.67,85.31,88.34,92.61,97.05,99.11,99.89,15548.74,558877.98,8760.0,0.6,1078077450.74,100.0,100.0,8760.0,1196365.44,1196365.44,27.11,123068.2,123068.2,82296.0,82296.0,8208.53,8208.53,58.71,86.55,94.7,96.78,98.47,99.24,99.67,99.86,99.94,19300.52,182061.35,8760.0,1080017.75,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.33,99.29,8698.0 -231,simulated,3C,1996.0,Hospital,San Jose,23000,DEER,0.28,1722174166.01,90.01,7885.0,100.0,1432056.28,1432056.28,61.66,196595.22,218411.44,20808.58,46118.43,0.0,3.3,71.46,79.0,81.92,84.03,86.8,91.08,95.67,98.85,99.86,3103.91,192114.14,8760.0,0.52,484648569.95,100.0,100.0,8760.0,599691.89,599691.89,25.82,55325.18,55325.18,49038.97,49038.97,2848.58,2848.58,61.51,91.63,96.19,97.59,98.64,99.38,99.75,99.95,99.99,13014.53,69693.37,8760.0,518440.95,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.42,90.01,7885.0 -232,simulated,3C,1996.0,Manufacturing,San Jose,19000,DEER,1.52,1551605138.21,98.78,8653.0,100.0,1712907.48,1712907.48,92.19,177123.87,179314.13,11559.53,12046.3,0.0,0.0,77.97,82.23,85.57,89.32,92.5,95.07,96.95,98.37,99.37,5400.45,105679.62,8760.0,0.07,2356622847.42,100.0,100.0,8760.0,1420004.82,1420004.82,76.43,269020.87,269020.87,164014.39,164014.39,3884.07,3884.07,48.03,61.04,72.64,82.8,90.75,95.51,98.2,99.45,99.77,32509.54,458113.48,8760.0,1333489.08,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.83,98.78,8653.0 -233,simulated,3C,1996.0,OfficeLarge,San Jose,16000,DEER,0.22,1657591088.01,51.96,4552.0,100.0,1279140.41,1279140.41,78.69,189222.73,364145.67,1168.09,209886.25,0.0,2.53,69.11,76.21,81.77,84.34,86.22,88.36,92.29,97.09,99.52,0.0,231655.8,8760.0,0.41,357515674.39,100.0,100.0,8760.0,548381.1,548381.1,33.73,40812.29,40812.29,19517.14,19517.14,2093.58,2093.58,77.66,91.34,94.79,96.4,97.95,98.97,99.6,99.85,99.95,4083.45,47461.15,8760.0,548381.1,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.43,51.96,4552.0 -234,simulated,3C,1996.0,Academic,Santa Maria,14000,DEER,0.75,632923941.04,96.54,8457.0,100.0,1078486.02,1078486.02,77.34,72251.59,74840.24,6316.44,6860.44,0.0,0.0,81.12,89.24,93.36,95.62,96.82,97.73,98.69,99.6,99.87,986.13,64678.88,8760.0,0.49,472287836.0,100.0,100.0,8760.0,634973.99,634973.99,45.54,53914.14,53914.14,14212.25,14212.25,612.73,612.73,69.5,77.93,98.08,99.1,99.61,99.79,99.92,99.94,99.99,8615.83,92013.54,8760.0,634841.92,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.59,96.54,8457.0 -235,simulated,3C,1996.0,Academic,Santa Maria,44000,DEER,0.43,2177188266.72,98.88,8662.0,100.0,2735227.89,2735227.89,61.99,248537.47,251349.37,35827.37,36738.29,0.0,0.0,74.9,84.21,89.79,93.2,95.75,97.28,98.39,99.28,99.87,12159.69,277943.9,8760.0,0.57,936088618.07,100.0,100.0,8760.0,962901.71,962901.71,21.82,106859.43,106859.43,75231.32,75231.32,9082.71,9082.71,58.14,82.05,95.84,97.97,98.89,99.38,99.7,99.86,99.91,19949.74,177392.9,8760.0,933378.84,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.35,98.88,8662.0 -236,simulated,3C,1996.0,Hospital,Santa Maria,23000,DEER,0.5,794883885.27,87.79,7690.0,100.0,1171534.92,1171534.92,50.44,90740.17,103365.91,5723.0,7715.82,0.0,5.5,79.0,86.84,91.35,94.55,96.29,97.13,98.6,99.38,99.9,2552.81,86569.56,8760.0,0.48,397829841.16,100.0,100.0,8760.0,510135.97,510135.97,21.96,45414.37,45414.37,38118.88,38118.88,3116.25,3116.25,57.13,93.94,97.63,98.87,99.34,99.66,99.86,99.97,99.99,12217.42,66491.41,8760.0,443003.59,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.44,87.79,7690.0 -237,simulated,3C,1996.0,Manufacturing,Santa Maria,19000,DEER,4.58,496745983.35,98.06,8590.0,100.0,1222210.2,1222210.2,65.78,56706.16,57828.4,7666.12,7869.03,0.0,0.0,88.23,93.3,95.97,97.59,98.5,99.2,99.55,99.68,99.89,4848.6,42643.44,8760.0,0.07,2272691091.72,100.0,100.0,8760.0,1227443.02,1227443.02,66.06,259439.62,259439.62,216824.84,216824.84,4510.24,4510.24,36.96,54.18,70.89,84.06,91.75,96.23,98.53,99.52,99.86,43648.42,402257.41,8760.0,1191705.36,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,1.0,98.06,8590.0 -238,simulated,3C,1996.0,OfficeLarge,Santa Maria,16000,DEER,0.33,816731490.08,43.23,3787.0,100.0,1130513.27,1130513.27,69.54,93234.19,215667.15,0.0,131523.36,0.0,10.16,76.76,85.0,90.27,93.94,95.87,96.85,97.74,98.89,99.67,0.0,96298.62,8760.0,0.31,268061115.52,100.0,100.0,8760.0,501735.53,501735.53,30.86,30600.58,30600.58,17060.16,17060.16,2269.6,2269.6,84.43,93.37,96.86,98.21,98.87,99.44,99.81,99.94,99.97,4376.65,31563.01,8760.0,501735.53,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.44,43.23,3787.0 -239,simulated,3B,1996.0,Academic,Los Angeles,14000,DEER,0.28,1307761682.28,97.53,8544.0,100.0,1202087.76,1202087.76,86.21,149287.86,153061.99,25036.06,28232.4,0.0,0.0,69.0,80.7,86.12,88.7,90.54,92.87,96.26,98.79,99.66,2754.96,174755.99,8760.0,0.73,369003854.99,100.0,100.0,8760.0,311604.47,311604.47,22.35,42123.73,42123.73,12959.68,12959.68,611.54,611.54,65.01,75.47,80.73,81.72,99.35,99.67,99.83,99.93,99.95,7805.17,60695.05,8760.0,311573.44,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.26,97.53,8544.0 -240,simulated,3B,1996.0,Academic,Los Angeles,44000,DEER,0.16,4152862590.07,99.38,8706.0,100.0,3081517.48,3081517.48,69.83,474071.07,477011.55,156026.81,160395.26,0.0,0.0,60.68,74.17,81.97,85.92,88.94,92.27,95.91,98.71,99.69,23610.12,640660.69,8760.0,0.8,682140046.67,100.0,100.0,8760.0,519263.85,519263.85,11.77,77869.87,77869.87,52663.95,52663.95,8199.72,8199.72,49.68,70.13,80.06,92.13,98.94,99.58,99.84,99.94,99.95,17982.09,121213.0,8760.0,519262.45,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.17,99.38,8706.0 -241,simulated,3B,1996.0,Hospital,Los Angeles,23000,DEER,0.17,1580710924.59,93.0,8147.0,100.0,1241266.24,1241266.24,53.44,180446.45,194023.68,63130.85,76607.07,0.0,4.69,63.73,77.4,83.3,86.68,89.83,92.92,95.55,98.01,99.57,5102.72,215008.23,8760.0,0.69,262285930.68,100.0,100.0,8760.0,276879.41,276879.41,11.92,29941.32,29941.32,20502.83,20502.83,2840.86,2840.86,58.93,72.43,97.4,98.68,99.58,99.81,99.92,99.94,99.99,4755.14,57269.01,8760.0,276879.41,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.22,93.0,8147.0 -242,simulated,3B,1996.0,Manufacturing,Los Angeles,19000,DEER,0.98,1031838531.36,98.45,8624.0,100.0,1337676.29,1337676.29,72.0,117789.79,119647.33,26379.67,28190.43,0.0,0.0,76.53,84.85,88.97,93.5,97.0,98.65,99.47,99.82,99.94,6225.36,121909.22,8760.0,0.14,1015122477.69,100.0,100.0,8760.0,805071.18,805071.18,43.33,115881.56,115881.56,36954.86,36954.86,3823.89,3823.89,61.05,71.38,81.06,89.18,94.35,97.43,98.95,99.7,99.94,15860.03,190054.87,8760.0,805070.86,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.6,98.45,8624.0 -243,simulated,3B,1996.0,OfficeLarge,Los Angeles,16000,DEER,0.11,1573630482.5,60.59,5308.0,100.0,1128392.42,1128392.42,69.41,179638.18,296463.92,34368.9,177224.45,0.0,19.24,61.5,74.1,81.26,85.41,87.68,89.43,91.71,96.59,99.34,0.0,238133.97,8760.0,0.53,174525414.85,100.0,100.0,8760.0,347801.74,347801.74,21.4,19922.99,19922.99,11506.91,11506.91,2075.69,2075.69,87.12,94.16,98.08,99.13,99.65,99.83,99.89,99.94,99.95,3185.54,23840.03,8760.0,347801.74,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.31,60.59,5308.0 -244,simulated,3B,1996.0,Academic,San Diego,14000,DEER,0.27,1401810324.59,97.76,8564.0,100.0,1219731.96,1219731.96,87.47,160024.01,163686.4,27063.85,30843.22,0.0,0.0,69.6,81.22,84.45,85.8,88.4,92.19,96.05,98.7,99.58,3054.39,166784.09,8760.0,0.75,375911143.88,100.0,100.0,8760.0,287463.43,287463.43,20.62,42912.23,42912.23,12965.12,12965.12,610.73,610.73,61.89,71.68,79.24,81.36,97.85,99.63,99.78,99.89,99.94,7712.32,70832.11,8760.0,286954.18,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.24,97.76,8564.0 -245,simulated,3B,1996.0,Academic,San Diego,44000,DEER,0.16,4395069534.97,99.61,8726.0,100.0,2980235.86,2980235.86,67.54,501720.27,503675.17,173259.01,175314.58,0.0,0.0,59.0,73.03,79.62,82.88,86.13,90.79,95.41,98.42,99.57,25671.8,661496.61,8760.0,0.83,707667285.11,100.0,100.0,8760.0,435210.82,435210.82,9.86,80783.94,80783.94,55230.14,55230.14,8023.48,8023.48,45.02,63.2,74.09,86.13,93.68,99.42,99.7,99.86,99.94,17681.15,135739.62,8760.0,425540.29,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.15,99.61,8726.0 -246,simulated,3B,1996.0,Hospital,San Diego,23000,DEER,0.15,1660106693.65,94.2,8252.0,100.0,1213433.27,1213433.27,52.24,189509.9,201176.28,70812.74,82498.24,0.0,28.43,61.48,75.63,81.14,85.34,88.95,91.95,95.37,98.12,99.58,5935.19,232631.36,8760.0,0.71,257293992.12,100.0,100.0,8760.0,274052.92,274052.92,11.8,29371.46,29371.46,20966.65,20966.65,2785.62,2785.62,58.13,73.37,98.12,99.27,99.67,99.91,99.98,99.98,99.99,4889.54,55896.65,8760.0,273689.51,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.23,94.2,8252.0 -247,simulated,3B,1996.0,Manufacturing,San Diego,19000,DEER,0.84,1110673871.32,98.41,8621.0,100.0,1320283.91,1320283.91,71.06,126789.25,128833.53,31825.82,33675.69,0.0,0.0,75.55,82.65,87.61,92.71,96.51,98.3,99.11,99.7,99.93,6342.1,126012.28,8760.0,0.16,934449648.7,100.0,100.0,8760.0,747930.29,747930.29,40.25,106672.33,106672.33,36196.21,36196.21,3746.4,3746.4,64.0,73.18,81.39,88.12,93.7,96.89,98.69,99.47,99.76,15457.97,164463.57,8760.0,747929.43,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.57,98.41,8621.0 -248,simulated,3B,1996.0,OfficeLarge,San Diego,16000,DEER,0.11,1660370508.05,62.42,5468.0,100.0,1080158.73,1080158.73,66.45,189540.01,303652.25,43397.19,178683.16,0.0,13.12,60.73,72.09,78.71,81.74,83.77,86.7,91.92,97.33,99.54,0.0,254435.9,8760.0,0.61,174964466.64,100.0,100.0,8760.0,309270.59,309270.59,19.03,19973.11,19973.11,12334.24,12334.24,2038.13,2038.13,84.49,92.15,97.97,99.41,99.77,99.93,99.97,99.98,99.98,3198.02,24232.34,8760.0,309270.59,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.29,62.42,5468.0 -249,simulated,3B,1996.0,Academic,Long Beach,14000,DEER,0.21,1879489297.06,97.5,8541.0,100.0,1545429.06,1545429.06,110.83,214553.57,220054.95,42293.97,48302.59,0.0,0.0,67.11,78.8,81.29,83.6,87.98,92.98,97.0,99.37,99.87,2775.8,234353.25,8760.0,0.75,387604100.39,100.0,100.0,8760.0,425873.32,425873.32,30.54,44247.04,44247.04,12793.9,12793.9,610.58,610.58,64.53,77.79,88.87,98.55,99.53,99.81,99.86,99.98,99.99,7557.76,74567.24,8760.0,425833.87,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.28,97.5,8541.0 -250,simulated,3B,1996.0,Academic,Long Beach,44000,DEER,0.13,5730166086.53,99.61,8726.0,100.0,3447103.28,3447103.28,78.12,654128.55,656677.3,223670.03,227071.29,0.0,0.0,57.11,68.71,75.74,79.16,83.07,88.26,93.44,97.92,99.75,24390.96,971875.45,8760.0,0.78,741991083.32,100.0,100.0,8760.0,647761.45,647761.45,14.68,84702.18,84702.18,59163.81,59163.81,7717.3,7717.3,51.85,72.36,89.62,97.85,99.0,99.62,99.86,99.97,99.98,17222.15,143865.67,8760.0,510427.0,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.19,99.61,8726.0 -251,simulated,3B,1996.0,Hospital,Long Beach,23000,DEER,0.13,2318023369.93,93.08,8154.0,100.0,1313132.28,1313132.28,56.54,264614.54,284280.52,87516.44,103460.46,0.0,2.71,57.95,70.29,74.94,77.79,80.94,85.14,90.01,95.46,99.2,5044.58,395962.91,8760.0,0.68,290062257.78,100.0,100.0,8760.0,290602.29,290602.29,12.51,33112.13,33112.13,23015.23,23015.23,2689.62,2689.62,54.76,79.19,95.35,97.89,99.14,99.71,99.86,99.95,99.95,4737.53,55624.46,8760.0,288427.67,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.22,93.08,8154.0 -252,simulated,3B,1996.0,Manufacturing,Long Beach,19000,DEER,0.6,1837868295.2,98.63,8640.0,100.0,1708260.38,1708260.38,91.94,209802.32,212716.24,43556.54,45651.44,0.0,0.0,69.43,76.79,83.05,88.11,92.9,96.7,98.57,99.41,99.81,6334.51,291705.32,8760.0,0.13,1100288116.6,100.0,100.0,8760.0,1017077.01,1017077.01,54.74,125603.67,125603.67,34054.98,34054.98,3614.27,3614.27,67.59,76.11,83.86,89.93,94.47,97.77,99.37,99.91,99.95,13658.4,190666.5,8760.0,927612.35,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.6,98.63,8640.0 -253,simulated,3B,1996.0,OfficeLarge,Long Beach,16000,DEER,0.09,2186502161.03,61.58,5394.0,100.0,1194031.68,1194031.68,73.45,249600.7,405358.21,54874.84,269156.39,0.0,13.51,57.17,67.28,73.98,77.61,79.76,82.58,87.26,93.73,99.18,0.0,383623.64,8760.0,0.55,200008711.4,100.0,100.0,8760.0,355064.68,355064.68,21.84,22832.04,22832.04,13538.15,13538.15,1971.43,1971.43,83.49,92.35,97.28,98.65,99.39,99.73,99.81,99.92,99.98,3124.54,26142.29,8760.0,355064.68,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.3,61.58,5394.0 -254,simulated,3B,1996.0,Academic,Los Angeles,14000,DEER,0.22,1827354635.82,97.25,8519.0,100.0,1383527.17,1383527.17,99.22,208602.13,214503.42,34511.72,40206.79,0.0,0.0,66.92,76.66,81.22,82.63,85.66,90.45,94.69,98.17,99.65,2249.78,236296.69,8760.0,0.71,401199358.56,100.0,100.0,8760.0,602985.68,602985.68,43.24,45799.01,45799.01,13049.33,13049.33,610.99,610.99,70.3,83.25,98.97,99.49,99.75,99.92,99.98,99.99,99.99,7739.87,77198.12,8760.0,602985.64,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.44,97.25,8519.0 -255,simulated,3B,1996.0,Academic,Los Angeles,44000,DEER,0.14,5509536581.87,99.5,8716.0,100.0,3412337.56,3412337.56,77.33,628942.53,632117.55,179090.85,182940.06,0.0,0.0,59.42,69.98,75.96,79.33,83.13,88.4,93.71,98.22,99.73,22269.34,954925.9,8760.0,0.75,788195749.8,100.0,100.0,8760.0,728468.25,728468.25,16.51,89976.68,89976.68,64411.84,64411.84,7760.86,7760.86,53.74,73.15,92.67,98.0,98.86,99.36,99.67,99.79,99.94,17419.47,150770.1,8760.0,670449.98,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.21,99.5,8716.0 -256,simulated,3B,1996.0,Hospital,Los Angeles,23000,DEER,0.14,2217998028.93,92.64,8115.0,100.0,1323811.66,1323811.66,57.0,253196.12,273320.77,68075.77,85375.73,0.0,4.79,61.93,71.55,75.72,78.13,81.32,85.88,90.78,95.81,99.3,4411.21,368534.81,8760.0,0.63,318885118.1,100.0,100.0,8760.0,466423.17,466423.17,20.08,36402.41,36402.41,26300.07,26300.07,2703.3,2703.3,61.1,94.66,98.38,99.41,99.62,99.77,99.89,99.95,99.98,5147.49,57383.12,8760.0,363347.33,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.35,92.64,8115.0 -257,simulated,3B,1996.0,Manufacturing,Los Angeles,19000,DEER,0.65,1859103010.08,98.48,8627.0,100.0,1664167.62,1664167.62,89.57,212226.37,215498.2,34857.59,37513.79,0.0,0.0,69.9,76.42,81.97,87.51,91.8,95.16,97.79,99.11,99.62,6123.13,294329.26,8760.0,0.12,1205484652.33,100.0,100.0,8760.0,1007942.54,1007942.54,54.25,137612.4,137612.4,36707.8,36707.8,3633.08,3633.08,64.71,74.09,81.84,88.37,93.48,97.04,98.62,99.46,99.84,15693.32,213076.9,8760.0,988179.02,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.61,98.48,8627.0 -258,simulated,3B,1996.0,OfficeLarge,Los Angeles,16000,DEER,0.11,2130134503.61,59.85,5243.0,100.0,1219923.34,1219923.34,75.04,243166.04,406281.61,38461.84,273634.78,0.0,1.79,60.06,68.54,74.67,78.13,80.37,83.17,88.29,94.6,99.44,0.0,374452.17,8760.0,0.52,227980817.45,100.0,100.0,8760.0,412302.78,412302.78,25.36,26025.21,26025.21,15448.03,15448.03,1982.0,1982.0,81.93,94.43,97.45,98.63,99.21,99.52,99.75,99.89,99.94,3216.27,28946.82,8760.0,380713.63,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.34,59.85,5243.0 -259,simulated,3B,1996.0,Academic,Riverside,14000,DEER,0.22,1912743749.37,96.82,8481.0,100.0,1406438.93,1406438.93,100.86,218349.74,225532.81,35258.36,41786.9,0.0,0.0,66.15,77.51,79.95,81.71,85.33,89.99,94.14,97.66,99.54,2072.24,237135.75,8760.0,0.69,413297748.04,100.0,100.0,8760.0,525440.86,525440.86,37.68,47180.11,47180.11,13081.61,13081.61,609.59,609.59,66.61,78.39,97.34,99.04,99.52,99.74,99.84,99.92,99.98,7679.4,82837.04,8760.0,524909.74,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.37,96.82,8481.0 -260,simulated,3B,1996.0,Academic,Riverside,44000,DEER,0.14,5741432072.67,99.6,8725.0,100.0,3380917.36,3380917.36,76.62,655414.62,658043.79,192196.56,194582.98,0.0,0.0,57.88,68.24,74.17,77.88,82.27,87.75,92.89,97.4,99.5,21979.23,1087856.89,8760.0,0.75,788703431.7,100.0,100.0,8760.0,744768.9,744768.9,16.88,90034.64,90034.64,66680.03,66680.03,7504.25,7504.25,52.75,74.71,93.69,98.32,99.13,99.52,99.71,99.86,99.91,17115.31,149861.82,8760.0,632181.58,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.22,99.6,8725.0 -261,simulated,3B,1996.0,Hospital,Riverside,23000,DEER,0.14,2473718467.57,92.57,8109.0,100.0,1383657.09,1383657.09,59.57,282387.95,305058.39,76345.01,95288.24,0.0,2.06,60.62,69.42,73.49,75.96,79.38,84.84,90.03,95.05,99.05,4228.31,501286.24,8760.0,0.62,355039832.93,100.0,100.0,8760.0,430464.24,430464.24,18.53,40529.66,40529.66,35193.22,35193.22,2646.14,2646.14,54.78,91.84,97.19,98.86,99.46,99.67,99.76,99.87,99.94,6530.96,59207.29,8760.0,429929.62,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.31,92.57,8109.0 -262,simulated,3B,1996.0,Manufacturing,Riverside,19000,DEER,0.58,2157457230.46,98.41,8621.0,100.0,1742256.42,1742256.42,93.77,246285.07,250256.03,39206.98,42404.8,0.0,0.0,67.55,74.5,80.07,85.61,90.07,93.3,96.24,98.63,99.5,6141.16,365078.59,8760.0,0.12,1255997267.29,100.0,100.0,8760.0,1040865.18,1040865.18,56.02,143378.68,143378.68,34990.01,34990.01,3521.6,3521.6,65.27,73.14,80.91,87.9,93.34,96.71,98.54,99.5,99.85,14743.97,233398.71,8760.0,1002126.18,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.6,98.41,8621.0 -263,simulated,3B,1996.0,OfficeLarge,Riverside,16000,DEER,0.1,2167554892.72,59.17,5183.0,100.0,1172433.98,1172433.98,72.12,247437.77,418204.69,39342.38,299310.8,0.0,13.96,58.73,67.01,73.14,76.56,79.51,82.5,86.92,92.68,98.71,0.0,400037.22,8760.0,0.57,220315805.89,100.0,100.0,8760.0,418156.33,418156.33,25.72,25150.21,25150.21,15932.3,15932.3,1926.77,1926.77,82.18,95.23,98.05,99.01,99.39,99.63,99.78,99.94,99.97,3227.09,28431.42,8760.0,418156.33,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.36,59.17,5183.0 -264,simulated,3B,1996.0,Academic,Red Bluff,14000,DEER,0.28,1794200298.67,95.27,8346.0,100.0,1525928.27,1525928.27,109.43,204817.39,214977.27,23543.89,33129.24,0.0,0.0,70.37,80.46,82.8,84.33,87.32,91.52,95.61,98.95,99.98,1813.5,209637.91,8760.0,0.49,509518686.89,100.0,100.0,8760.0,860641.51,860641.51,61.72,58164.23,58164.23,19908.36,19908.36,609.19,609.19,72.49,94.34,97.36,98.79,99.62,99.86,99.94,99.97,99.99,8624.55,102811.55,8760.0,809588.49,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.56,95.27,8346.0 -265,simulated,3B,1996.0,Academic,Red Bluff,44000,DEER,0.2,5489579173.08,99.53,8719.0,100.0,3494168.38,3494168.38,79.19,626664.29,629611.1,145107.72,147665.6,0.0,0.0,61.74,70.92,76.56,79.82,83.58,88.3,93.44,97.16,99.5,16880.0,915252.8,8760.0,0.56,1088505294.1,100.0,100.0,8760.0,1320575.99,1320575.99,29.93,124258.6,124258.6,87486.43,87486.43,7275.44,7275.44,61.36,89.68,95.02,97.31,98.79,99.47,99.69,99.87,99.98,18226.38,179389.29,8760.0,1157024.51,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.38,99.53,8719.0 -266,simulated,3B,1996.0,Hospital,Red Bluff,23000,DEER,0.22,2273219394.11,92.85,8134.0,100.0,1445867.03,1445867.03,62.25,259499.93,279471.28,72846.13,87612.06,0.0,0.79,64.2,72.99,76.87,78.88,82.0,87.07,92.68,97.11,99.69,3534.46,352234.1,8760.0,0.51,497703147.71,100.0,100.0,8760.0,582712.87,582712.87,25.09,56815.43,56815.43,50411.74,50411.74,2561.05,2561.05,62.77,89.61,95.25,97.55,98.56,99.2,99.68,99.86,99.94,12289.56,69396.23,8760.0,531718.29,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.4,92.85,8134.0 -267,simulated,3B,1996.0,Manufacturing,Red Bluff,19000,DEER,0.87,2386635796.96,98.77,8652.0,100.0,1727002.04,1727002.04,92.95,272447.01,275847.87,28196.93,30062.97,0.0,0.0,67.88,73.81,78.05,82.59,86.87,90.54,93.45,96.15,98.26,5561.0,395147.21,8760.0,0.07,2071494688.88,100.0,100.0,8760.0,1476341.4,1476341.4,79.46,236472.0,236472.0,47342.25,47342.25,3423.34,3423.34,58.14,66.75,74.87,84.37,91.91,96.71,98.76,99.63,99.87,15238.58,444501.28,8760.0,1463820.27,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.85,98.77,8652.0 -268,simulated,3B,1996.0,OfficeLarge,Red Bluff,16000,DEER,0.19,2094418986.11,56.61,4959.0,100.0,1294996.4,1294996.4,79.66,239088.93,422347.04,22678.12,291649.23,0.0,20.73,62.75,70.07,76.46,80.24,82.72,85.27,89.37,94.91,98.9,0.0,360238.1,8760.0,0.41,394446564.6,100.0,100.0,8760.0,559383.24,559383.24,34.41,45028.15,45028.15,20924.3,20924.3,1888.18,1888.18,72.74,90.55,94.55,96.54,97.92,99.06,99.51,99.75,99.86,3892.64,61759.91,8760.0,559383.24,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.43,56.61,4959.0 -269,simulated,3B,1996.0,Academic,Stockton,14000,DEER,0.37,1368628065.82,95.56,8371.0,100.0,1350316.27,1350316.27,96.84,156236.08,163496.36,9553.65,13461.2,0.0,0.0,73.79,83.09,85.65,87.47,89.62,92.64,95.84,98.47,99.81,1436.1,147063.07,8760.0,0.48,510975010.48,100.0,100.0,8760.0,791001.24,791001.24,56.73,58330.48,58330.48,22012.49,22012.49,610.6,610.6,72.26,93.21,97.31,98.81,99.45,99.74,99.89,99.97,99.99,8922.95,96691.54,8760.0,791001.13,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.59,95.56,8371.0 -270,simulated,3B,1996.0,Academic,Stockton,44000,DEER,0.25,4215017533.68,99.39,8707.0,100.0,3223740.9,3223740.9,73.06,481166.39,484095.27,72071.48,73694.14,0.0,0.0,67.02,76.24,81.39,84.38,87.19,90.54,94.25,97.56,99.54,14636.21,581495.53,8760.0,0.55,1042863164.07,100.0,100.0,8760.0,1157770.8,1157770.8,26.24,119048.31,119048.31,74619.96,74619.96,7998.0,7998.0,60.07,86.03,94.21,96.83,98.28,99.14,99.57,99.81,99.94,19003.44,175129.99,8760.0,1068708.82,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.36,99.39,8707.0 -271,simulated,3B,1996.0,Hospital,Stockton,23000,DEER,0.27,1731272432.01,90.59,7936.0,100.0,1314146.15,1314146.15,56.58,197633.84,218154.29,28193.14,48274.86,0.0,0.08,69.77,78.09,81.13,83.25,85.62,88.81,92.88,97.17,99.65,2977.16,195567.32,8760.0,0.47,474598371.48,100.0,100.0,8760.0,557942.54,557942.54,24.02,54177.9,54177.9,44058.35,44058.35,2778.35,2778.35,56.75,89.42,95.22,97.35,98.36,99.11,99.55,99.85,99.98,7677.17,68972.87,8760.0,475948.79,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.42,90.59,7936.0 -272,simulated,3B,1996.0,Manufacturing,Stockton,19000,DEER,1.44,1557316280.23,98.58,8636.0,100.0,1673034.04,1673034.04,90.04,177775.83,180328.43,11833.78,12334.54,0.0,0.0,77.27,81.75,85.21,88.82,91.95,94.84,97.11,98.58,99.67,5087.27,120491.93,8760.0,0.06,2240250508.99,100.0,100.0,8760.0,1421848.55,1421848.55,76.53,255736.36,255736.36,113229.55,113229.55,3739.24,3739.24,52.11,62.92,73.07,82.52,90.16,95.86,98.66,99.57,99.84,26520.95,452434.63,8760.0,1408724.98,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.85,98.58,8636.0 -273,simulated,3B,1996.0,OfficeLarge,Stockton,16000,DEER,0.21,1602142234.74,52.51,4600.0,100.0,1131648.42,1131648.42,69.61,182892.95,348291.79,1592.34,204584.89,0.0,5.07,67.72,74.78,80.17,83.57,85.35,87.26,89.47,93.64,98.78,0.0,230466.96,8760.0,0.35,331197442.53,100.0,100.0,8760.0,541597.38,541597.38,33.32,37807.93,37807.93,17534.89,17534.89,2047.3,2047.3,80.21,91.43,95.07,96.72,98.04,98.93,99.52,99.82,99.92,3640.93,36604.02,8760.0,511743.81,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.48,52.51,4600.0 -274,simulated,3B,1996.0,Academic,Fresno,14000,DEER,0.24,1900570486.13,95.94,8404.0,100.0,1472457.91,1472457.91,105.6,216960.1,226150.7,34781.11,44057.44,0.0,0.0,68.09,79.03,81.66,83.24,85.79,90.03,94.28,98.13,99.75,2048.02,227502.35,8760.0,0.54,464409424.42,100.0,100.0,8760.0,792447.53,792447.53,56.83,53014.77,53014.77,19947.76,19947.76,609.86,609.86,73.55,94.89,97.98,99.14,99.65,99.84,99.93,99.97,99.99,8726.18,87749.29,8760.0,792447.5,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.54,95.94,8404.0 -275,simulated,3B,1996.0,Academic,Fresno,44000,DEER,0.17,5789178112.03,99.49,8715.0,100.0,3455060.27,3455060.27,78.3,660865.08,664277.47,203813.26,207444.34,0.0,0.0,58.06,69.19,74.79,78.33,82.55,87.25,92.95,97.33,99.54,18438.71,1049774.09,8760.0,0.6,980445078.17,100.0,100.0,8760.0,1043376.35,1043376.35,23.65,111922.95,111922.95,74205.07,74205.07,6986.93,6986.93,58.13,84.9,94.45,96.82,97.99,98.85,99.47,99.78,99.95,17583.93,167043.52,8760.0,1042356.92,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.3,99.49,8715.0 -276,simulated,3B,1996.0,Hospital,Fresno,23000,DEER,0.19,2391843148.59,92.99,8146.0,100.0,1415130.64,1415130.64,60.93,273041.46,293621.8,84145.23,101613.48,0.0,2.46,60.75,71.23,75.59,77.8,80.61,85.22,91.23,96.77,99.67,3726.93,398722.21,8760.0,0.51,450025871.57,100.0,100.0,8760.0,531410.55,531410.55,22.88,51372.82,51372.82,44010.82,44010.82,2482.16,2482.16,61.79,88.84,95.49,97.52,98.56,99.08,99.45,99.84,99.98,6822.65,66181.47,8760.0,438158.56,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.38,92.99,8146.0 -277,simulated,3B,1996.0,Manufacturing,Fresno,19000,DEER,0.71,2596159436.35,98.8,8655.0,100.0,1825066.15,1825066.15,98.23,296365.23,299960.65,42360.97,45949.24,0.0,0.0,64.78,71.84,76.75,81.87,86.93,90.92,94.29,97.35,99.51,5553.31,477093.79,8760.0,0.07,1840044015.93,100.0,100.0,8760.0,1271252.12,1271252.12,68.42,210050.69,210050.69,34989.62,34989.62,3297.93,3297.93,60.43,67.03,74.03,82.43,89.62,94.61,97.76,99.34,99.79,12323.93,396785.55,8760.0,1256981.35,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.7,98.8,8655.0 -278,simulated,3B,1996.0,OfficeLarge,Fresno,16000,DEER,0.15,2140110846.93,57.79,5062.0,100.0,1176452.4,1176452.4,72.37,244304.89,422779.7,28841.28,307903.9,0.0,0.0,59.2,66.96,73.23,77.79,80.39,83.03,86.51,92.47,98.56,0.0,394539.98,8760.0,0.42,318267154.35,100.0,100.0,8760.0,489863.44,489863.44,30.13,36331.87,36331.87,16683.93,16683.93,1823.25,1823.25,77.02,91.71,95.15,96.7,97.76,98.71,99.41,99.7,99.92,3653.83,40951.4,8760.0,489863.44,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.42,57.79,5062.0 -279,simulated,3B,1996.0,Academic,Daggett,14000,DEER,0.26,1820726504.48,97.64,8553.0,100.0,1303475.68,1303475.68,93.48,207845.49,212875.78,45595.98,50361.05,0.0,0.0,67.34,78.13,81.27,82.61,84.43,88.07,92.49,96.4,99.42,3133.24,206462.61,8760.0,0.6,469538329.35,100.0,100.0,8760.0,864518.4,864518.4,62.0,53600.27,53600.27,18030.7,18030.7,610.75,610.75,74.68,96.16,98.21,99.09,99.69,99.89,99.97,99.97,99.99,8734.34,89463.58,8760.0,841393.94,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.66,97.64,8553.0 -280,simulated,3B,1996.0,Academic,Daggett,44000,DEER,0.19,5664471504.08,99.57,8722.0,100.0,3183684.13,3183684.13,72.15,646629.17,649446.4,227482.81,229749.72,0.0,0.0,56.32,68.76,74.17,77.64,81.68,86.05,91.28,95.99,98.95,30423.56,1016570.18,8760.0,0.69,1053710078.54,100.0,100.0,8760.0,1204068.77,1204068.77,27.29,120286.54,120286.54,83168.0,83168.0,7168.99,7168.99,59.51,88.39,94.81,96.55,98.15,99.22,99.69,99.85,99.91,18119.73,174417.2,8760.0,1099323.12,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.38,99.57,8722.0 -281,simulated,3B,1996.0,Hospital,Daggett,23000,DEER,0.19,2315843952.48,95.02,8324.0,100.0,1360072.17,1360072.17,58.56,264365.75,278212.87,82709.74,90353.02,0.0,2.3,61.75,70.98,75.06,77.34,80.23,85.87,92.11,96.97,99.63,5095.79,406141.85,8760.0,0.66,433058845.44,100.0,100.0,8760.0,587902.07,587902.07,25.31,49435.94,49435.94,41855.38,41855.38,2600.58,2600.58,69.63,93.28,96.62,97.79,98.72,99.33,99.78,99.93,99.97,8791.57,64318.11,8760.0,510899.69,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.43,95.02,8324.0 -282,simulated,3B,1996.0,Manufacturing,Daggett,19000,DEER,0.8,2380745873.43,99.03,8675.0,100.0,1704424.45,1704424.45,91.73,271774.64,274437.56,43622.82,46255.04,0.0,0.0,65.49,72.29,77.56,82.67,87.29,91.32,94.5,97.23,99.13,6786.51,422133.15,8760.0,0.09,1898318179.62,100.0,100.0,8760.0,1429547.91,1429547.91,76.94,216702.99,216702.99,39841.57,39841.57,3378.15,3378.15,61.29,69.59,76.92,85.16,91.99,95.73,98.54,99.43,99.87,15145.34,393917.69,8760.0,1416290.23,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.84,99.03,8675.0 -283,simulated,3B,1996.0,OfficeLarge,Daggett,16000,DEER,0.17,2138911101.68,60.82,5328.0,100.0,1228916.91,1228916.91,75.6,244167.93,401447.28,48827.83,272064.19,0.0,22.07,59.76,67.85,74.74,78.9,81.77,84.67,88.49,93.77,98.7,0.0,373016.12,8760.0,0.55,367472582.56,100.0,100.0,8760.0,548534.02,548534.02,33.74,41948.92,41948.92,20330.57,20330.57,1870.21,1870.21,74.34,92.51,94.82,96.14,97.9,99.0,99.62,99.86,99.94,3869.74,56412.92,8760.0,520294.64,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.45,60.82,5328.0 -284,simulated,2B,1996.0,Academic,El Centro,14000,DEER,0.11,3138858040.15,98.6,8637.0,100.0,1789523.81,1789523.81,128.34,358317.13,363419.94,132973.56,137210.93,0.0,0.0,56.26,69.83,71.58,74.44,81.18,88.31,94.19,98.42,99.77,9629.25,734988.4,8760.0,0.87,340187565.79,100.0,100.0,8760.0,407955.61,407955.61,29.26,38834.2,38834.2,12067.76,12067.76,606.83,606.83,64.47,78.06,92.59,99.43,99.83,99.9,99.93,99.99,99.99,6484.68,72811.33,8760.0,407599.65,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.23,98.6,8637.0 -285,simulated,2B,1996.0,Academic,El Centro,44000,DEER,0.08,9332287056.05,99.85,8747.0,100.0,4175783.08,4175783.08,94.63,1065329.57,1066912.89,585274.51,586597.53,0.0,0.0,43.2,56.28,61.8,67.96,76.79,86.15,93.52,97.84,99.68,81507.39,2004936.04,8760.0,0.88,776660442.1,100.0,100.0,8760.0,862488.99,862488.99,19.55,88659.87,88659.87,71945.76,71945.76,5486.88,5486.88,55.34,84.59,96.61,99.41,99.78,99.87,99.93,99.98,99.98,14331.23,143070.46,8760.0,688779.48,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.21,99.85,8747.0 -286,simulated,2B,1996.0,Hospital,El Centro,23000,DEER,0.08,3831800284.39,95.88,8399.0,100.0,1636498.74,1636498.74,70.46,437420.12,456221.01,183253.12,209919.02,0.0,7.87,47.67,56.39,61.86,65.5,72.69,82.89,90.39,96.12,99.43,43433.86,857047.18,8760.0,0.85,311634143.93,100.0,100.0,8760.0,455010.47,455010.47,19.59,35574.67,35574.67,33634.84,33634.84,2041.66,2041.66,66.44,93.45,98.65,99.79,99.87,99.94,99.98,99.98,99.99,4047.76,53953.86,8760.0,432721.85,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.28,95.88,8399.0 -287,simulated,2B,1996.0,Manufacturing,El Centro,19000,DEER,0.15,4805662840.89,99.1,8681.0,100.0,2040931.5,2040931.5,109.85,548591.65,553584.02,375885.88,387626.92,0.0,0.0,43.52,51.3,59.91,69.37,76.93,83.13,88.79,94.01,99.17,16779.61,961325.99,8760.0,0.18,737759186.55,100.0,100.0,8760.0,1167795.75,1167795.75,62.85,84219.09,84219.09,21616.78,21616.78,2618.58,2618.58,81.13,86.67,91.44,94.79,97.72,99.19,99.74,99.94,99.97,5869.92,48381.76,8760.0,1149168.61,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.57,99.1,8681.0 -288,simulated,2B,1996.0,OfficeLarge,El Centro,16000,DEER,0.09,3399002171.85,72.16,6321.0,100.0,1441391.42,1441391.42,88.67,388013.95,537731.72,205744.09,475723.38,0.0,11.87,45.78,54.47,62.13,68.69,73.57,79.35,87.15,94.28,99.12,0.0,761065.26,8760.0,0.81,301222590.13,100.0,100.0,8760.0,499026.25,499026.25,30.7,34386.14,34386.14,20645.49,20645.49,1460.08,1460.08,67.05,96.13,99.28,99.73,99.83,99.91,99.97,99.98,99.98,3043.35,65118.64,8760.0,499026.25,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.35,72.16,6321.0 -289,simulated,4B,1996.0,Academic,Bishop,14000,DEER,0.78,852315458.72,97.89,8575.0,100.0,1060990.73,1060990.73,76.09,97296.29,99395.39,24668.72,29266.97,0.0,0.0,75.98,88.23,91.23,93.06,94.2,95.71,97.57,99.58,99.98,2347.44,100557.62,8760.0,0.44,660927075.73,100.0,100.0,8760.0,804490.72,804490.72,57.69,75448.3,75448.3,23553.57,23553.57,613.07,613.07,68.77,85.92,92.53,95.42,97.53,98.98,99.67,99.84,99.95,9711.4,139916.64,8760.0,757735.39,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.76,97.89,8575.0 -290,simulated,4B,1996.0,Academic,Bishop,44000,DEER,0.48,2865665524.23,99.55,8721.0,100.0,2504646.01,2504646.01,56.76,327130.77,328593.68,123586.36,126829.94,0.0,0.0,63.15,81.86,87.55,90.23,92.21,94.11,95.73,97.75,99.51,22256.15,372221.2,8760.0,0.61,1367495117.86,100.0,100.0,8760.0,1464759.91,1464759.91,33.19,156106.75,156106.75,80790.67,80790.67,8996.46,8996.46,63.45,85.49,90.89,94.71,97.48,98.98,99.67,99.82,99.97,21811.34,207208.72,8760.0,1268260.96,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.58,99.55,8721.0 -291,simulated,4B,1996.0,Hospital,Bishop,23000,DEER,0.54,1170421728.43,94.33,8263.0,100.0,1045985.87,1045985.87,45.03,133609.79,141646.1,57367.21,64426.35,0.0,14.16,66.4,80.59,88.22,90.17,92.13,93.56,95.55,97.43,99.78,4647.6,164285.01,8760.0,0.62,626597406.15,100.0,100.0,8760.0,579107.62,579107.62,24.93,71529.38,71529.38,54149.65,54149.65,3090.25,3090.25,51.89,84.58,89.81,92.51,95.43,97.63,99.0,99.74,99.91,13125.54,77659.4,8760.0,511712.67,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.55,94.33,8263.0 -292,simulated,4B,1996.0,Manufacturing,Bishop,19000,DEER,3.29,779713476.02,99.05,8677.0,100.0,987528.44,987528.44,53.15,89008.39,89859.8,18537.57,19306.93,0.0,0.0,81.74,86.58,89.87,92.27,94.55,96.26,97.96,99.27,99.91,6355.23,70214.57,8760.0,0.08,2562192779.34,100.0,100.0,8760.0,1327435.71,1327435.71,71.44,292487.76,292487.76,201849.04,201849.04,4165.12,4165.12,44.2,55.37,67.58,77.57,84.73,91.84,96.59,98.97,99.85,30001.3,490070.38,8760.0,1289270.95,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,1.34,99.05,8677.0 -293,simulated,4B,1996.0,OfficeLarge,Bishop,16000,DEER,0.47,1101336135.84,54.58,4781.0,100.0,1014541.07,1014541.07,62.41,125723.3,230356.86,12486.4,135720.53,0.0,6.39,68.52,78.81,86.12,90.22,92.21,93.52,95.19,96.61,99.3,0.0,155184.84,8760.0,0.48,516125103.67,100.0,100.0,8760.0,611196.4,611196.4,37.6,58918.39,58918.39,21699.0,21699.0,2261.05,2261.05,76.27,85.8,89.09,92.45,95.08,97.88,99.29,99.59,99.91,5164.97,56916.34,8760.0,578230.42,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.6,54.58,4781.0 -294,simulated,4C,2020.0,Academic,Eureka,14000,DEER,5.2,121406011.71,86.13,7545.0,100.0,628671.45,628671.45,45.09,13859.13,16090.92,4144.72,5026.36,0.0,0.0,94.41,98.03,99.25,99.62,99.85,99.92,99.95,99.97,99.97,1.38,8366.48,8760.0,0.16,631332724.38,100.0,100.0,8760.0,572589.29,572589.29,41.06,72069.95,72069.95,17406.53,17406.53,613.58,613.58,61.61,69.95,89.36,94.76,97.47,98.86,99.44,99.78,99.91,9413.52,152595.7,8760.0,570526.09,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.91,86.13,7545.0 -295,simulated,4C,2020.0,Academic,Eureka,44000,DEER,2.62,465540891.22,98.45,8624.0,100.0,1566461.25,1566461.25,35.5,53143.94,53982.01,18240.19,19184.54,0.0,0.0,91.56,96.22,98.66,99.28,99.63,99.87,99.95,99.95,99.97,8308.16,43620.59,8760.0,0.28,1218100938.09,100.0,100.0,8760.0,951640.6,951640.6,21.57,139052.62,139052.62,104595.7,104595.7,9752.82,9752.82,48.01,67.75,88.04,94.25,97.18,98.65,99.32,99.76,99.92,21348.77,207424.2,8760.0,764913.59,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.61,98.45,8624.0 -296,simulated,4C,2020.0,Hospital,Eureka,23000,DEER,3.5,135644951.01,85.89,7524.0,100.0,725006.83,725006.83,31.21,15484.58,18028.3,2847.83,3290.38,0.0,0.73,94.63,97.91,99.02,99.49,99.74,99.91,99.95,99.95,99.97,1325.66,5035.02,8760.0,0.19,474954309.9,100.0,100.0,8760.0,429007.76,429007.76,18.47,54218.53,54218.53,47437.72,47437.72,3335.52,3335.52,46.18,85.57,93.98,97.32,98.72,99.41,99.7,99.86,99.93,16819.44,73817.2,8760.0,429007.76,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.59,85.89,7524.0 -297,simulated,4C,2020.0,Manufacturing,Eureka,19000,DEER,36.67,99143047.99,97.71,8559.0,100.0,768199.53,768199.53,41.35,11317.7,11583.48,5092.73,5187.2,0.0,0.0,98.57,99.75,99.89,99.93,99.95,99.95,99.95,99.98,99.98,3674.66,10394.26,8760.0,0.03,3635652610.97,100.0,100.0,8760.0,1290092.71,1290092.71,69.43,415028.84,415028.84,381049.61,381049.61,5429.5,5429.5,10.74,25.92,51.32,69.19,82.71,92.2,97.1,98.94,99.71,252426.08,569491.09,8760.0,1276046.05,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,1.68,97.71,8559.0 -298,simulated,4C,2020.0,OfficeLarge,Eureka,16000,DEER,2.93,92847773.04,22.58,1978.0,100.0,595479.35,595479.35,36.63,10599.06,46940.23,0.0,20586.24,0.0,7.32,93.4,97.74,99.04,99.52,99.73,99.9,99.93,99.95,99.95,0.0,0.0,8760.0,0.16,271726411.2,100.0,100.0,8760.0,418146.13,418146.13,25.72,31019.0,31019.0,18726.53,18726.53,2412.35,2412.35,82.15,91.62,95.64,97.16,98.37,99.19,99.68,99.82,99.94,3759.34,33363.16,8760.0,415200.32,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.7,22.58,1978.0 -299,simulated,3C,2020.0,Academic,Napa,14000,DEER,0.83,749863163.74,92.97,8144.0,100.0,1107156.18,1107156.18,79.4,85600.82,92075.54,4215.39,5213.72,0.0,0.0,82.16,88.22,90.19,91.59,93.62,96.53,98.66,99.52,99.93,53.82,56097.41,8760.0,0.36,621073601.38,100.0,100.0,8760.0,765609.07,765609.07,54.91,70898.81,70898.81,25342.19,25342.19,612.54,612.54,66.16,86.27,94.66,97.32,98.61,99.28,99.65,99.85,99.97,9234.55,138317.47,8760.0,765609.0,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.69,92.97,8144.0 -300,simulated,3C,2020.0,Academic,Napa,44000,DEER,0.47,2253055505.08,99.33,8701.0,100.0,2415500.29,2415500.29,54.74,257198.12,258942.13,37427.18,37900.35,0.0,0.0,74.89,83.62,87.37,89.79,91.82,94.65,96.93,98.92,99.79,12174.1,243270.08,8760.0,0.5,1051546596.4,100.0,100.0,8760.0,996426.04,996426.04,22.58,120039.57,120039.57,83162.78,83162.78,8891.63,8891.63,55.54,79.5,93.33,96.32,97.98,99.0,99.5,99.81,99.9,19746.31,183788.95,8760.0,810806.65,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.41,99.33,8701.0 -301,simulated,3C,2020.0,Hospital,Napa,23000,DEER,0.6,1045307127.55,82.88,7260.0,100.0,1249249.63,1249249.63,53.79,119327.3,143981.7,4124.52,13289.76,0.0,0.42,79.42,84.93,87.66,89.65,91.83,94.82,97.75,99.39,99.94,968.49,90590.61,8760.0,0.32,628584305.03,100.0,100.0,8760.0,609196.3,609196.3,26.23,71756.2,71756.2,62880.57,62880.57,3088.37,3088.37,47.08,84.6,92.92,96.61,98.33,99.16,99.63,99.85,99.92,23397.79,84926.19,8760.0,593638.33,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.49,82.88,7260.0 -302,simulated,3C,2020.0,Manufacturing,Napa,19000,DEER,3.61,783410631.37,97.89,8575.0,100.0,1377827.74,1377827.74,74.16,89430.44,91359.84,8236.1,8720.79,0.0,0.0,85.29,88.9,91.6,94.11,96.22,97.89,99.08,99.62,99.9,4263.19,48441.53,8760.0,0.05,2828173278.1,100.0,100.0,8760.0,1445687.17,1445687.17,77.81,322850.83,322850.83,283744.66,283744.66,4379.28,4379.28,35.08,50.68,68.79,80.53,90.14,95.94,98.53,99.59,99.9,45644.85,506373.01,8760.0,1433071.39,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,1.05,97.89,8575.0 -303,simulated,3C,2020.0,OfficeLarge,Napa,16000,DEER,0.31,814880342.21,44.87,3931.0,100.0,910230.07,910230.07,55.99,93022.87,207295.94,0.0,96755.55,0.0,9.46,77.0,84.52,87.52,89.06,90.06,91.76,95.96,99.1,99.84,0.0,73120.57,8760.0,0.43,255142499.72,100.0,100.0,8760.0,425146.65,425146.65,26.15,29125.86,29125.86,17147.31,17147.31,2234.71,2234.71,84.1,92.67,96.1,97.04,98.18,99.26,99.71,99.84,99.91,3531.03,30466.37,8760.0,420586.55,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.47,44.87,3931.0 -304,simulated,3C,2020.0,Academic,Oakland,14000,DEER,1.35,387678253.13,93.15,8160.0,100.0,867906.65,867906.65,62.24,44255.51,47509.59,3558.43,4652.8,0.0,0.0,84.46,92.08,95.67,97.47,98.23,98.74,99.34,99.7,99.89,85.86,33552.98,8760.0,0.37,524586112.46,100.0,100.0,8760.0,706221.68,706221.68,50.65,59884.26,59884.26,21256.25,21256.25,611.97,611.97,69.36,81.63,96.6,98.45,99.41,99.71,99.9,99.97,99.98,8775.98,111736.06,8760.0,706221.6,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.81,93.15,8160.0 -305,simulated,3C,2020.0,Academic,Oakland,44000,DEER,0.65,1330636272.07,98.97,8670.0,100.0,2044353.75,2044353.75,46.33,151899.12,153475.93,33896.56,34493.57,0.0,0.0,78.88,88.16,92.99,95.74,97.5,98.37,99.09,99.6,99.91,10791.08,148325.39,8760.0,0.53,870403800.99,100.0,100.0,8760.0,755784.25,755784.25,17.13,99361.16,99361.16,71907.95,71907.95,8934.0,8934.0,53.13,72.55,88.93,97.08,98.36,99.24,99.68,99.87,99.93,19598.82,170711.76,8760.0,600384.74,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.37,98.97,8670.0 -306,simulated,3C,2020.0,Hospital,Oakland,23000,DEER,0.91,547125934.21,82.89,7261.0,100.0,995051.15,995051.15,42.84,62457.3,75351.32,3721.1,6791.69,0.0,0.01,82.42,90.26,94.17,96.02,97.42,98.09,98.69,99.41,99.77,927.5,58176.13,8760.0,0.29,499868282.57,100.0,100.0,8760.0,521174.2,521174.2,22.44,57062.59,57062.59,53570.1,53570.1,3118.2,3118.2,49.49,87.63,94.69,97.91,99.06,99.53,99.81,99.9,99.98,19893.09,70176.91,8760.0,490604.67,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.52,82.89,7261.0 -307,simulated,3C,2020.0,Manufacturing,Oakland,19000,DEER,6.62,332833724.29,97.58,8548.0,100.0,1153741.31,1153741.31,62.1,37994.72,38937.03,7152.33,7681.57,0.0,0.0,92.66,96.26,97.81,98.73,99.21,99.57,99.77,99.92,99.97,4312.06,27623.96,8760.0,0.06,2203899919.28,100.0,100.0,8760.0,1098134.57,1098134.57,59.1,251586.75,251586.75,203399.16,203399.16,4220.43,4220.43,34.05,52.71,68.2,79.24,88.92,95.05,97.97,99.38,99.79,45303.49,397523.33,8760.0,1082205.7,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.95,97.58,8548.0 -308,simulated,3C,2020.0,OfficeLarge,Oakland,16000,DEER,0.42,420300891.95,45.07,3948.0,100.0,703360.58,703360.58,43.27,47979.55,106459.19,0.0,53475.2,0.0,7.57,80.38,88.33,92.97,95.39,96.82,97.71,98.18,98.81,99.63,0.0,39634.62,8760.0,0.33,178487386.63,100.0,100.0,8760.0,397729.24,397729.24,24.47,20375.27,20375.27,12270.17,12270.17,2240.62,2240.62,90.55,96.27,98.26,98.96,99.41,99.68,99.86,99.93,99.98,3358.88,24169.77,8760.0,397729.24,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.57,45.07,3948.0 -309,simulated,3C,2020.0,Academic,San Jose,14000,DEER,0.5,1140009873.67,94.67,8293.0,100.0,1303987.41,1303987.41,93.52,130138.11,137466.52,7593.12,9905.26,0.0,0.0,78.11,84.6,86.38,88.18,91.77,95.16,97.91,99.53,99.98,569.05,98766.46,8760.0,0.44,569733173.22,100.0,100.0,8760.0,775746.56,775746.56,55.63,65038.03,65038.03,23100.29,23100.29,611.71,611.71,68.39,89.05,95.86,97.77,99.03,99.6,99.78,99.91,99.98,9065.81,125311.77,8760.0,775746.56,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.59,94.67,8293.0 -310,simulated,3C,2020.0,Academic,San Jose,44000,DEER,0.31,3201863729.13,99.46,8713.0,100.0,2540998.94,2540998.94,57.58,365509.56,367481.2,54735.95,55586.2,0.0,0.0,67.74,77.85,82.18,84.89,87.63,91.37,95.24,97.74,99.51,15745.84,394545.82,8760.0,0.58,983041451.54,100.0,100.0,8760.0,1033273.64,1033273.64,23.42,112219.34,112219.34,77013.21,77013.21,8208.98,8208.98,58.37,83.32,94.5,96.84,98.39,99.27,99.75,99.87,99.94,18728.53,171533.11,8760.0,701036.07,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.41,99.46,8713.0 -311,simulated,3C,2020.0,Hospital,San Jose,23000,DEER,0.38,1554986546.14,86.42,7570.0,100.0,1352322.98,1352322.98,58.22,177509.88,205414.34,16952.02,47430.79,0.0,1.86,73.4,79.32,82.4,84.54,87.92,92.09,96.12,98.85,99.84,1705.59,162102.06,8760.0,0.4,585917821.61,100.0,100.0,8760.0,626691.3,626691.3,26.98,66885.6,66885.6,58116.47,58116.47,2856.79,2856.79,58.14,87.71,94.41,96.95,98.48,99.26,99.68,99.92,99.99,21286.88,79005.29,8760.0,608567.61,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.46,86.42,7570.0 -312,simulated,3C,2020.0,Manufacturing,San Jose,19000,DEER,1.76,1358752166.28,98.26,8608.0,100.0,1511025.49,1511025.49,81.33,155108.69,157847.6,11133.83,11632.02,0.0,0.0,78.41,82.63,85.99,89.49,92.51,94.9,96.74,98.23,99.47,4646.27,89169.94,8760.0,0.07,2396375555.71,100.0,100.0,8760.0,1378015.44,1378015.44,74.17,273558.85,273558.85,180842.04,180842.04,3884.09,3884.09,46.15,59.03,71.18,81.63,89.9,94.74,97.75,99.42,99.73,32435.17,462107.43,8760.0,1290766.96,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.91,98.26,8608.0 -313,simulated,3C,2020.0,OfficeLarge,San Jose,16000,DEER,0.22,1167125272.23,51.74,4532.0,100.0,945711.95,945711.95,58.18,133233.48,257529.85,178.69,130294.22,0.0,5.19,70.33,78.65,82.44,84.06,85.59,88.36,93.13,97.75,99.66,0.0,141325.47,8760.0,0.52,256463170.04,100.0,100.0,8760.0,429883.45,429883.45,26.44,29276.62,29276.62,17266.39,17266.39,2093.78,2093.78,82.25,93.44,96.0,96.8,98.41,99.51,99.83,99.92,99.94,3388.07,30466.49,8760.0,426136.22,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.45,51.74,4532.0 -314,simulated,3C,2020.0,Academic,Santa Maria,14000,DEER,1.09,488862249.03,94.83,8307.0,100.0,922356.96,922356.96,66.15,55806.19,58849.43,4127.29,4728.75,0.0,0.0,82.89,90.25,93.96,96.19,97.2,98.22,99.05,99.73,99.92,203.63,46566.42,8760.0,0.41,533484441.82,100.0,100.0,8760.0,682015.37,682015.37,48.91,60900.05,60900.05,15401.85,15401.85,612.74,612.74,66.83,75.86,96.48,98.49,99.29,99.69,99.82,99.92,99.98,8686.15,126783.71,8760.0,682015.26,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.74,94.83,8307.0 -315,simulated,3C,2020.0,Academic,Santa Maria,44000,DEER,0.55,1634722323.3,99.08,8679.0,100.0,1997266.0,1997266.0,45.26,186612.14,188353.76,35710.61,36381.98,0.0,0.0,74.62,84.29,89.53,93.08,95.5,97.12,98.33,99.3,99.85,11503.18,205058.72,8760.0,0.57,906103834.45,100.0,100.0,8760.0,855066.34,855066.34,19.38,103436.51,103436.51,75802.14,75802.14,9083.14,9083.14,55.86,73.92,92.88,97.56,98.74,99.44,99.79,99.92,99.95,19779.5,174340.25,8760.0,565830.17,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.43,99.08,8679.0 -316,simulated,3C,2020.0,Hospital,Santa Maria,23000,DEER,0.74,686684372.86,83.74,7336.0,100.0,1084782.81,1084782.81,46.7,78388.63,93604.74,4065.48,7073.5,0.0,0.24,79.97,87.72,91.97,95.42,96.5,97.57,98.79,99.44,99.85,1069.37,75151.51,8760.0,0.35,505487086.45,100.0,100.0,8760.0,537973.88,537973.88,23.16,57704.01,57704.01,56327.37,56327.37,3246.24,3246.24,48.3,89.71,96.19,98.14,99.11,99.59,99.84,99.95,99.98,22564.82,69747.32,8760.0,514474.46,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.5,83.74,7336.0 -317,simulated,3C,2020.0,Manufacturing,Santa Maria,19000,DEER,5.54,422649160.5,97.5,8541.0,100.0,1108387.58,1108387.58,59.65,48247.62,49484.74,7081.87,7600.52,0.0,0.0,89.03,94.0,96.51,97.89,98.74,99.36,99.62,99.69,99.91,4235.87,37922.23,8760.0,0.06,2341149230.75,100.0,100.0,8760.0,1211194.26,1211194.26,65.19,267254.48,267254.48,232723.68,232723.68,4510.23,4510.23,34.71,51.39,68.85,83.0,91.06,96.07,98.45,99.54,99.87,46960.09,407858.02,8760.0,1125865.23,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,1.09,97.5,8541.0 -318,simulated,3C,2020.0,OfficeLarge,Santa Maria,16000,DEER,0.34,529606985.27,44.67,3913.0,100.0,767861.87,767861.87,47.24,60457.42,135345.51,0.0,75546.07,0.0,5.92,77.88,86.34,91.0,94.42,96.04,96.63,97.33,98.81,99.65,0.0,56384.88,8760.0,0.43,179867329.91,100.0,100.0,8760.0,416439.34,416439.34,25.62,20532.8,20532.8,12856.54,12856.54,2269.48,2269.48,91.64,96.64,98.16,98.81,99.41,99.79,99.91,99.95,99.98,3388.51,24215.61,8760.0,416439.34,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.54,44.67,3913.0 -319,simulated,3B,2020.0,Academic,Los Angeles,14000,DEER,0.36,1077338033.28,96.72,8473.0,100.0,1030508.47,1030508.47,73.9,122983.79,127149.54,17086.92,21593.07,0.0,0.0,70.71,80.67,86.24,89.06,91.06,93.58,96.68,98.94,99.68,1946.22,137944.17,8760.0,0.68,392463535.6,100.0,100.0,8760.0,388922.08,388922.08,27.89,44801.77,44801.77,13044.59,13044.59,611.51,611.51,64.61,76.13,80.27,98.84,99.32,99.65,99.84,99.94,99.97,7815.6,74580.6,8760.0,388922.01,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.38,96.72,8473.0 -320,simulated,3B,2020.0,Academic,Los Angeles,44000,DEER,0.2,3261644471.08,99.66,8730.0,100.0,2504731.37,2504731.37,56.76,372333.84,373613.34,122883.81,123885.75,0.0,0.0,60.63,74.89,82.55,86.4,89.97,93.62,97.05,99.08,99.76,25074.07,505355.28,8760.0,0.81,659661870.84,100.0,100.0,8760.0,388227.91,388227.91,8.8,75303.87,75303.87,51484.42,51484.42,8199.39,8199.39,44.89,65.05,74.82,81.18,91.59,96.64,99.75,99.89,99.98,17972.97,117529.53,8760.0,378349.0,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.15,99.66,8730.0 -321,simulated,3B,2020.0,Hospital,Los Angeles,23000,DEER,0.22,1411085616.69,92.18,8075.0,100.0,1159762.74,1159762.74,49.93,161082.83,174747.44,55590.57,69268.1,0.0,0.99,64.49,78.28,84.11,87.39,90.64,93.58,96.16,98.32,99.57,3606.85,191351.07,8760.0,0.59,307628701.23,100.0,100.0,8760.0,334902.5,334902.5,14.42,35117.43,35117.43,25720.8,25720.8,2841.76,2841.76,55.35,92.72,97.27,98.89,99.47,99.77,99.9,99.94,99.98,7589.69,58742.85,8760.0,334902.5,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.29,92.18,8075.0 -322,simulated,3B,2020.0,Manufacturing,Los Angeles,19000,DEER,1.23,859729696.59,98.03,8587.0,100.0,1222614.34,1222614.34,65.8,98142.66,100119.91,23746.45,25874.98,0.0,0.0,77.71,86.24,91.0,95.32,97.88,99.08,99.68,99.92,99.94,5533.71,99582.29,8760.0,0.13,1058675022.82,100.0,100.0,8760.0,767040.34,767040.34,41.28,120853.31,120853.31,38460.54,38460.54,3823.89,3823.89,58.23,68.34,78.49,87.32,93.03,96.63,98.6,99.51,99.92,17383.72,203354.29,8760.0,767040.29,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.63,98.03,8587.0 -323,simulated,3B,2020.0,OfficeLarge,Los Angeles,16000,DEER,0.12,1093363825.52,60.75,5322.0,100.0,843883.61,843883.61,51.91,124813.22,205442.28,19533.38,112674.3,0.0,7.62,64.49,76.94,83.65,86.22,88.2,89.61,91.95,97.12,99.44,0.0,150792.76,8760.0,0.65,131661986.65,100.0,100.0,8760.0,280211.34,280211.34,17.24,15029.91,15029.91,9706.51,9706.51,2075.61,2075.61,88.34,96.16,98.61,99.67,99.81,99.85,99.91,99.93,99.95,3083.29,20413.07,8760.0,280211.34,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.33,60.75,5322.0 -324,simulated,3B,2020.0,Academic,San Diego,14000,DEER,0.35,1159101688.81,96.87,8486.0,100.0,1105199.12,1105199.12,79.26,132317.54,136589.88,20785.11,24652.92,0.0,0.0,72.02,82.09,84.94,86.97,90.32,94.16,97.29,99.13,99.67,2390.61,132878.93,8760.0,0.7,400237924.21,100.0,100.0,8760.0,332183.27,332183.27,23.82,45689.26,45689.26,13041.18,13041.18,610.81,610.81,61.55,71.46,79.06,89.53,99.06,99.53,99.69,99.87,99.92,7722.39,78182.15,8760.0,332183.24,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.3,96.87,8486.0 -325,simulated,3B,2020.0,Academic,San Diego,44000,DEER,0.2,3469471859.27,99.74,8737.0,100.0,2353269.77,2353269.77,53.33,396058.43,397101.05,139905.95,140882.89,0.0,0.0,58.5,73.22,79.63,82.91,86.51,91.19,95.76,98.24,99.47,25284.27,516858.25,8760.0,0.83,685345628.91,100.0,100.0,8760.0,387521.79,387521.79,8.78,78235.8,78235.8,53500.0,53500.0,8023.26,8023.26,43.58,61.07,71.28,80.81,92.41,97.07,99.81,99.89,99.98,17721.04,128229.53,8760.0,377183.7,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.16,99.74,8737.0 -326,simulated,3B,2020.0,Hospital,San Diego,23000,DEER,0.2,1491382104.18,93.46,8187.0,100.0,1123639.23,1123639.23,48.38,170249.1,182164.66,62579.55,73779.19,0.0,0.96,62.32,76.24,81.46,85.95,89.58,92.56,95.76,98.31,99.55,4455.85,205366.51,8760.0,0.63,294132586.8,100.0,100.0,8760.0,309210.33,309210.33,13.31,33576.78,33576.78,27114.52,27114.52,2785.56,2785.56,53.08,84.58,97.81,99.13,99.6,99.85,99.94,99.98,99.99,7101.26,57030.36,8760.0,309210.33,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.28,93.46,8187.0 -327,simulated,3B,2020.0,Manufacturing,San Diego,19000,DEER,1.05,924698912.79,98.05,8589.0,100.0,1206871.73,1206871.73,64.96,105559.24,107660.84,28642.83,30816.55,0.0,0.0,76.78,84.37,89.77,94.33,97.43,98.65,99.37,99.79,99.94,5558.3,105668.52,8760.0,0.15,970438610.05,100.0,100.0,8760.0,744188.27,744188.27,40.05,110780.66,110780.66,36641.51,36641.51,3746.4,3746.4,61.77,71.5,80.14,87.4,93.42,96.88,98.7,99.46,99.77,17046.71,177420.7,8760.0,744187.54,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.62,98.05,8589.0 -328,simulated,3B,2020.0,OfficeLarge,San Diego,16000,DEER,0.11,1192936653.47,62.82,5503.0,100.0,799157.51,799157.51,49.16,136179.98,216779.33,25849.11,109493.1,0.0,9.2,63.22,74.89,79.87,81.29,82.76,86.02,91.86,97.26,99.38,0.0,160792.0,8760.0,0.72,135924467.15,100.0,100.0,8760.0,196246.63,196246.63,12.07,15516.49,15516.49,10073.22,10073.22,2038.06,2038.06,70.86,93.28,95.71,98.0,99.69,99.95,99.98,99.98,99.99,3079.8,21057.41,8760.0,196246.63,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.25,62.82,5503.0 -329,simulated,3B,2020.0,Academic,Long Beach,14000,DEER,0.26,1572475146.46,96.78,8478.0,100.0,1337965.84,1337965.84,95.95,179506.3,185477.13,33203.62,40256.58,0.0,0.0,68.9,78.96,81.47,84.22,88.84,93.41,97.05,99.26,99.84,2136.88,188216.47,8760.0,0.71,406626481.97,100.0,100.0,8760.0,527924.14,527924.14,37.86,46418.55,46418.55,12916.88,12916.88,610.12,610.12,66.88,79.12,98.05,99.17,99.57,99.81,99.93,99.99,99.99,7598.13,78561.96,8760.0,527924.13,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.39,96.78,8478.0 -330,simulated,3B,2020.0,Academic,Long Beach,44000,DEER,0.16,4436748803.73,99.74,8737.0,100.0,2756536.5,2756536.5,62.47,506478.17,507811.47,183720.87,186036.88,0.0,0.0,56.5,69.41,76.08,80.0,84.6,90.05,94.74,98.38,99.79,26871.2,755585.71,8760.0,0.8,696357281.93,100.0,100.0,8760.0,622747.84,622747.84,14.11,79492.84,79492.84,57379.55,57379.55,7717.32,7717.32,51.38,74.28,90.81,98.26,99.62,99.83,99.94,99.97,99.98,17178.5,127055.19,8760.0,451781.29,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.23,99.74,8737.0 -331,simulated,3B,2020.0,Hospital,Long Beach,23000,DEER,0.16,2126605769.02,91.92,8052.0,100.0,1246655.36,1246655.36,53.67,242763.22,264109.01,78383.27,97292.97,0.0,0.48,58.97,70.98,75.43,78.36,81.97,86.28,90.87,95.88,99.28,3687.76,363412.69,8760.0,0.58,341290276.03,100.0,100.0,8760.0,352679.36,352679.36,15.18,38960.08,38960.08,34163.43,34163.43,2689.6,2689.6,51.12,89.59,96.04,98.15,99.02,99.58,99.83,99.92,99.99,6787.51,58810.62,8760.0,352679.36,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.28,91.92,8052.0 -332,simulated,3B,2020.0,Manufacturing,Long Beach,19000,DEER,0.72,1567821019.65,98.03,8587.0,100.0,1558931.6,1558931.6,83.9,178975.0,182580.76,37946.51,40937.12,0.0,0.0,70.9,78.58,84.49,89.47,94.06,97.16,98.66,99.52,99.81,5635.01,227181.58,8760.0,0.13,1126912587.13,100.0,100.0,8760.0,1009259.93,1009259.93,54.32,128642.99,128642.99,34238.18,34238.18,3614.28,3614.28,66.13,74.83,83.29,89.67,94.44,97.64,99.42,99.91,99.95,14724.01,204394.03,8760.0,920356.35,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.65,98.03,8587.0 -333,simulated,3B,2020.0,OfficeLarge,Long Beach,16000,DEER,0.1,1545521280.35,61.71,5406.0,100.0,851062.39,851062.39,52.35,176429.37,285889.99,31549.71,166477.44,0.0,21.88,59.0,69.47,74.89,77.17,78.84,81.63,86.78,92.99,98.55,0.0,259419.0,8760.0,0.68,152196868.85,100.0,100.0,8760.0,303573.85,303573.85,18.67,17374.07,17374.07,10493.53,10493.53,1971.19,1971.19,87.57,94.09,98.76,99.55,99.73,99.82,99.9,99.97,99.98,3060.52,21683.13,8760.0,303573.85,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.36,61.71,5406.0 -334,simulated,3B,2020.0,Academic,Los Angeles,14000,DEER,0.29,1477028545.09,96.37,8442.0,100.0,1269960.94,1269960.94,91.08,168610.56,174961.92,24403.23,30902.18,0.0,0.0,70.14,79.69,81.7,83.97,88.52,93.12,96.82,99.03,99.86,1668.87,170896.01,8760.0,0.65,428662732.03,100.0,100.0,8760.0,665539.48,665539.48,47.73,48934.1,48934.1,13189.31,13189.31,610.9,610.9,69.78,89.67,98.58,99.34,99.7,99.87,99.95,99.98,99.99,7799.96,83562.14,8760.0,665539.47,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.52,96.37,8442.0 -335,simulated,3B,2020.0,Academic,Los Angeles,44000,DEER,0.17,4164141468.94,99.68,8732.0,100.0,2686555.48,2686555.48,60.88,475358.62,476882.9,143408.85,145431.96,0.0,0.0,59.11,71.44,76.62,80.03,84.83,90.13,94.99,98.48,99.61,23257.45,696616.78,8760.0,0.76,727767312.92,100.0,100.0,8760.0,607737.63,607737.63,13.77,83078.46,83078.46,61935.6,61935.6,7760.93,7760.93,49.66,71.75,88.63,96.93,99.06,99.5,99.77,99.91,99.94,17302.08,133557.48,8760.0,511009.37,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.23,99.68,8732.0 -336,simulated,3B,2020.0,Hospital,Los Angeles,23000,DEER,0.19,2023827923.14,90.72,7947.0,100.0,1250861.47,1250861.47,53.85,231030.58,254665.65,60601.36,81837.01,0.0,3.5,62.6,71.85,76.06,78.66,82.55,87.26,91.85,96.26,99.29,3116.74,338640.86,8760.0,0.53,377373045.28,100.0,100.0,8760.0,486058.36,486058.36,20.93,43079.11,43079.11,37505.03,37505.03,2703.23,2703.23,56.86,93.13,97.34,98.86,99.5,99.62,99.84,99.92,99.98,8920.48,60625.4,8760.0,434529.49,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.39,90.72,7947.0 -337,simulated,3B,2020.0,Manufacturing,Los Angeles,19000,DEER,0.78,1585626851.6,98.13,8596.0,100.0,1552614.86,1552614.86,83.56,181007.63,184461.01,30655.07,33565.45,0.0,0.0,71.31,78.37,84.22,89.2,93.11,96.15,98.32,99.3,99.7,5441.9,228252.72,8760.0,0.11,1230924601.46,100.0,100.0,8760.0,982216.68,982216.68,52.86,140516.51,140516.51,37263.96,37263.96,3633.08,3633.08,62.96,72.27,80.53,87.63,92.91,96.79,98.54,99.45,99.86,16411.08,225270.09,8760.0,941762.06,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.63,98.13,8596.0 -338,simulated,3B,2020.0,OfficeLarge,Los Angeles,16000,DEER,0.12,1475911461.47,59.93,5250.0,100.0,855408.06,855408.06,52.62,168483.04,281125.99,20296.05,157016.0,0.0,17.46,62.18,71.2,75.47,77.4,79.16,82.35,87.83,94.02,98.93,0.0,239002.1,8760.0,0.66,173245779.37,100.0,100.0,8760.0,334386.57,334386.57,20.57,19776.92,19776.92,11245.33,11245.33,1981.79,1981.79,86.36,93.16,98.53,99.3,99.54,99.66,99.81,99.87,99.97,3089.05,23387.3,8760.0,334386.57,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.39,59.93,5250.0 -339,simulated,3B,2020.0,Academic,Riverside,14000,DEER,0.26,1642607404.74,96.29,8435.0,100.0,1300419.81,1300419.81,93.26,187512.26,194737.1,30109.37,35583.35,0.0,0.0,68.53,77.98,80.35,82.74,87.32,91.67,95.4,98.38,99.7,1622.15,193258.16,8760.0,0.65,428198034.61,100.0,100.0,8760.0,564445.95,564445.95,40.48,48881.05,48881.05,13149.62,13149.62,609.57,609.57,66.74,78.76,97.37,98.86,99.46,99.66,99.83,99.91,99.98,7698.17,85751.89,8760.0,563672.33,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.43,96.29,8435.0 -340,simulated,3B,2020.0,Academic,Riverside,44000,DEER,0.16,4595999312.91,99.69,8733.0,100.0,2814942.37,2814942.37,63.79,524657.46,526279.55,164936.94,167202.59,0.0,0.0,57.55,69.38,74.84,78.86,83.92,89.47,94.37,97.81,99.6,24850.61,854049.86,8760.0,0.76,731540162.03,100.0,100.0,8760.0,662485.16,662485.16,15.01,83509.15,83509.15,65067.72,65067.72,7504.28,7504.28,50.51,74.59,90.73,98.5,99.32,99.58,99.84,99.89,99.93,17020.28,134120.8,8760.0,474786.15,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.24,99.69,8733.0 -341,simulated,3B,2020.0,Hospital,Riverside,23000,DEER,0.17,2245485041.98,91.37,8004.0,100.0,1298719.05,1298719.05,55.91,256333.91,280545.36,70013.12,91733.82,0.0,0.67,60.96,69.75,73.96,76.55,80.87,86.2,90.87,95.61,99.08,3208.3,428201.9,8760.0,0.54,387963308.35,100.0,100.0,8760.0,468677.1,468677.1,20.18,44288.05,44288.05,40653.75,40653.75,2646.22,2646.22,54.36,92.04,97.04,98.52,99.37,99.59,99.78,99.9,99.98,9446.36,61360.16,8760.0,468677.1,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.36,91.37,8004.0 -342,simulated,3B,2020.0,Manufacturing,Riverside,19000,DEER,0.67,1902093240.27,97.87,8573.0,100.0,1595752.76,1595752.76,85.89,217133.93,221870.2,35487.77,38801.19,0.0,0.0,68.44,75.42,81.36,86.54,90.56,93.6,96.38,98.68,99.46,5431.29,304933.07,8760.0,0.11,1282576519.6,100.0,100.0,8760.0,1030381.51,1030381.51,55.46,146412.84,146412.84,35417.02,35417.02,3521.69,3521.69,63.82,72.01,80.14,87.43,93.01,96.53,98.53,99.49,99.86,15083.51,244941.42,8760.0,942337.78,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.65,97.87,8573.0 -343,simulated,3B,2020.0,OfficeLarge,Riverside,16000,DEER,0.11,1637657925.31,59.62,5223.0,100.0,886970.18,886970.18,54.56,186947.25,313547.37,24748.22,200381.17,0.0,6.77,60.19,68.56,73.63,75.96,78.09,81.45,86.61,92.44,98.57,0.0,321817.93,8760.0,0.67,179290151.1,100.0,100.0,8760.0,371290.57,371290.57,22.84,20466.91,20466.91,12232.05,12232.05,1926.43,1926.43,85.95,95.56,99.02,99.34,99.53,99.75,99.92,99.97,99.98,3106.12,24133.44,8760.0,371290.57,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.42,59.62,5223.0 -344,simulated,3B,2020.0,Academic,Red Bluff,14000,DEER,0.34,1429125939.14,94.5,8278.0,100.0,1271041.25,1271041.25,91.15,163142.23,172641.45,17775.36,27196.27,0.0,0.0,73.68,80.79,82.89,84.58,87.84,91.94,95.8,98.95,99.98,1747.67,141076.44,8760.0,0.51,479969897.95,100.0,100.0,8760.0,736154.75,736154.75,52.79,54791.08,54791.08,14434.82,14434.82,610.05,610.05,71.06,90.35,96.83,98.74,99.58,99.86,99.97,99.98,99.98,8444.94,96272.06,8760.0,719220.38,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.58,94.5,8278.0 -345,simulated,3B,2020.0,Academic,Red Bluff,44000,DEER,0.23,4231079590.8,99.33,8701.0,100.0,2759796.73,2759796.73,62.54,482999.95,486275.09,105865.91,111048.12,0.0,0.0,61.08,72.16,77.11,80.24,84.21,89.42,93.93,97.34,99.51,18437.99,680135.25,8760.0,0.56,964021733.04,100.0,100.0,8760.0,910643.49,910643.49,20.64,110048.14,110048.14,79326.19,79326.19,7275.35,7275.35,53.52,79.63,92.39,95.97,97.83,98.89,99.41,99.74,99.83,17647.2,162269.81,8760.0,866616.68,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.33,99.33,8701.0 -346,simulated,3B,2020.0,Hospital,Red Bluff,23000,DEER,0.2,1799585030.65,93.06,8152.0,100.0,1187917.14,1187917.14,51.14,205432.08,220753.81,56312.63,66113.78,0.0,1.12,66.46,73.08,76.8,79.26,82.9,88.48,93.68,97.75,99.76,2957.16,285174.63,8760.0,0.53,358452133.14,100.0,100.0,8760.0,470471.41,470471.41,20.26,40919.19,40919.19,29180.18,29180.18,2561.12,2561.12,60.09,92.88,96.48,98.31,99.03,99.55,99.78,99.9,99.95,5475.1,59861.62,8760.0,466984.18,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.4,93.06,8152.0 -347,simulated,3B,2020.0,Manufacturing,Red Bluff,19000,DEER,0.98,2110050515.86,98.47,8626.0,100.0,1609587.87,1609587.87,86.63,240873.35,244615.18,24324.07,27179.21,0.0,0.0,69.01,74.65,79.35,83.87,87.97,91.2,94.02,96.6,98.53,4980.9,331960.04,8760.0,0.07,2077032019.58,100.0,100.0,8760.0,1416652.18,1416652.18,76.25,237104.11,237104.11,47441.73,47441.73,3423.33,3423.33,56.93,65.53,74.01,82.98,90.7,96.12,98.48,99.62,99.85,15557.55,445464.74,8760.0,1403768.25,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.88,98.47,8626.0 -348,simulated,3B,2020.0,OfficeLarge,Red Bluff,16000,DEER,0.2,1493235000.12,54.97,4815.0,100.0,984154.82,984154.82,60.54,170460.62,310121.5,4306.76,188728.1,0.0,7.81,65.17,73.12,77.23,79.81,82.31,85.84,91.21,95.91,99.27,0.0,224702.48,8760.0,0.54,293808628.09,100.0,100.0,8760.0,469076.0,469076.0,28.86,33539.8,33539.8,18599.13,18599.13,1888.38,1888.38,76.45,93.63,96.52,97.75,98.81,99.5,99.7,99.85,99.93,3476.76,42090.25,8760.0,464690.63,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.48,54.97,4815.0 -349,simulated,3B,2020.0,Academic,Stockton,14000,DEER,0.46,1087402710.65,93.69,8207.0,100.0,1152859.15,1152859.15,82.68,124132.73,132496.98,9353.89,12666.63,0.0,0.0,76.8,83.63,86.11,87.95,90.53,93.72,96.77,99.09,99.91,800.1,98278.73,8760.0,0.48,497132224.04,100.0,100.0,8760.0,717139.4,717139.4,51.43,56750.25,56750.25,16177.67,16177.67,611.44,611.44,70.54,88.01,96.66,98.58,99.42,99.73,99.89,99.98,99.98,8702.46,96066.79,8760.0,717139.31,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.62,93.69,8207.0 -350,simulated,3B,2020.0,Academic,Stockton,44000,DEER,0.3,3240383899.83,99.39,8707.0,100.0,2566004.12,2566004.12,58.15,369906.84,372158.48,53563.54,54783.7,0.0,0.0,66.96,77.56,82.23,85.01,87.96,91.44,95.03,98.04,99.55,14406.81,417762.59,8760.0,0.55,960740677.88,100.0,100.0,8760.0,947708.2,947708.2,21.48,109673.59,109673.59,72388.54,72388.54,7997.32,7997.32,56.76,79.87,93.61,96.45,98.03,99.13,99.6,99.83,99.9,18444.48,167561.65,8760.0,789445.31,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.37,99.39,8707.0 -351,simulated,3B,2020.0,Hospital,Stockton,23000,DEER,0.28,1383663730.29,90.46,7924.0,100.0,1140921.77,1140921.77,49.12,157952.48,174616.83,21815.99,37647.57,0.0,0.21,72.08,78.44,81.45,84.0,87.2,91.06,95.39,98.54,99.81,2412.08,146975.99,8760.0,0.46,387535067.82,100.0,100.0,8760.0,473727.2,473727.2,20.4,44239.16,44239.16,31168.7,31168.7,2778.4,2778.4,57.36,91.48,95.84,97.77,98.74,99.43,99.73,99.92,99.99,5671.51,63770.83,8760.0,442641.92,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.42,90.46,7924.0 -352,simulated,3B,2020.0,Manufacturing,Stockton,19000,DEER,1.67,1358057914.12,97.95,8580.0,100.0,1504690.84,1504690.84,80.98,155029.44,158281.81,11139.15,11752.11,0.0,0.0,78.12,82.24,85.92,89.28,92.34,95.11,97.16,98.63,99.7,4466.06,99632.0,8760.0,0.06,2264566249.11,100.0,100.0,8760.0,1372122.64,1372122.64,73.85,258512.13,258512.13,130329.39,130329.39,3739.23,3739.23,50.55,61.06,71.67,81.48,89.21,95.29,98.52,99.57,99.82,27166.02,457378.34,8760.0,1358938.06,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.91,97.95,8580.0 -353,simulated,3B,2020.0,OfficeLarge,Stockton,16000,DEER,0.23,1148594810.79,51.31,4495.0,100.0,941813.17,941813.17,57.94,131118.13,255527.21,207.5,129981.17,0.0,9.57,70.8,78.66,82.59,84.61,86.31,88.89,92.99,97.4,99.73,0.0,138549.91,8760.0,0.49,264723859.93,100.0,100.0,8760.0,435917.1,435917.1,26.82,30219.62,30219.62,16973.34,16973.34,2047.07,2047.07,80.41,93.12,96.18,97.32,98.33,99.24,99.74,99.89,99.97,3325.7,31908.76,8760.0,435917.1,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.46,51.31,4495.0 -354,simulated,3B,2020.0,Academic,Fresno,14000,DEER,0.3,1525786063.42,95.45,8361.0,100.0,1203708.16,1203708.16,86.32,174176.49,182488.47,26700.17,33605.28,0.0,0.0,71.6,79.43,81.68,83.22,85.64,89.77,93.84,97.47,99.61,1356.7,158374.9,8760.0,0.54,451026240.68,100.0,100.0,8760.0,710764.17,710764.17,50.97,51487.01,51487.01,14618.65,14618.65,609.78,609.78,71.89,90.61,97.27,99.0,99.62,99.84,99.95,99.97,99.98,8477.29,87734.28,8760.0,708866.76,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.59,95.45,8361.0 -355,simulated,3B,2020.0,Academic,Fresno,44000,DEER,0.2,4514651483.58,99.5,8716.0,100.0,2765506.96,2765506.96,62.67,515371.17,517972.86,149724.44,153378.7,0.0,0.0,57.36,70.33,75.57,78.7,82.83,88.5,93.55,97.58,99.55,19005.17,787347.57,8760.0,0.6,884802956.82,100.0,100.0,8760.0,828451.35,828451.35,18.77,101004.9,101004.9,70223.28,70223.28,6986.18,6986.18,54.13,77.82,92.11,96.06,97.96,99.0,99.61,99.79,99.92,17040.68,154071.06,8760.0,734323.79,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.3,99.5,8716.0 -356,simulated,3B,2020.0,Hospital,Fresno,23000,DEER,0.18,1914631106.78,92.83,8132.0,100.0,1159346.91,1159346.91,49.91,218565.19,235444.06,67546.57,81183.78,0.0,4.12,62.91,71.19,75.62,78.12,81.34,86.14,91.92,96.91,99.63,3063.01,325076.01,8760.0,0.52,344348427.76,100.0,100.0,8760.0,433805.8,433805.8,18.68,39309.18,39309.18,27231.15,27231.15,2495.73,2495.73,58.95,92.24,96.35,97.98,98.8,99.45,99.81,99.92,99.99,4746.47,58328.07,8760.0,394257.22,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.37,92.83,8132.0 -357,simulated,3B,2020.0,Manufacturing,Fresno,19000,DEER,0.8,2298286650.83,98.36,8616.0,100.0,1679728.25,1679728.25,90.4,262361.49,266746.36,35923.38,40070.42,0.0,0.0,65.72,72.72,77.71,83.01,87.56,91.45,94.75,97.66,99.6,5006.64,409435.14,8760.0,0.07,1848787984.58,100.0,100.0,8760.0,1205383.34,1205383.34,64.88,211048.86,211048.86,35162.14,35162.14,3297.91,3297.91,59.25,65.53,72.53,80.29,88.03,93.33,97.2,99.22,99.74,11891.93,401292.48,8760.0,1186190.51,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.72,98.36,8616.0 -358,simulated,3B,2020.0,OfficeLarge,Fresno,16000,DEER,0.18,1561360573.95,55.17,4833.0,100.0,952759.15,952759.15,58.61,178237.51,323062.4,8039.05,205229.52,0.0,8.46,62.67,71.02,75.47,78.64,80.75,84.68,89.82,94.9,98.92,0.0,266452.91,8760.0,0.57,277999515.9,100.0,100.0,8760.0,418157.64,418157.64,25.72,31735.1,31735.1,17365.34,17365.34,1823.2,1823.2,75.32,92.89,96.47,97.57,98.34,99.35,99.78,99.93,99.97,3340.97,41193.66,8760.0,418157.64,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.44,55.17,4833.0 -359,simulated,3B,2020.0,Academic,Daggett,14000,DEER,0.31,1475851271.77,97.27,8521.0,100.0,1121263.93,1121263.93,80.41,168476.17,173201.65,33733.9,35695.7,0.0,0.0,71.84,79.28,81.53,82.72,85.05,88.9,93.3,96.96,99.47,4057.6,148773.96,8760.0,0.57,464443195.8,100.0,100.0,8760.0,810776.44,810776.44,58.14,53018.63,53018.63,14635.03,14635.03,609.03,609.03,73.52,95.34,98.11,99.21,99.69,99.86,99.95,99.97,99.99,8302.43,90570.21,8760.0,798948.0,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.72,97.27,8521.0 -360,simulated,3B,2020.0,Academic,Daggett,44000,DEER,0.21,4409824163.72,99.61,8726.0,100.0,2705479.35,2705479.35,61.31,503404.58,505366.05,164584.39,166146.46,0.0,0.0,58.08,70.87,75.51,78.85,83.55,88.84,94.02,97.53,99.6,26609.54,767072.01,8760.0,0.65,947698020.46,100.0,100.0,8760.0,1003913.3,1003913.3,22.75,108184.71,108184.71,78435.13,78435.13,7169.87,7169.87,57.07,84.7,94.51,96.99,98.24,99.19,99.68,99.84,99.92,17581.69,158434.8,8760.0,880329.72,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.37,99.61,8726.0 -361,simulated,3B,2020.0,Hospital,Daggett,23000,DEER,0.18,1866361833.27,94.69,8295.0,100.0,1102499.01,1102499.01,47.47,213055.0,224998.41,63403.79,71016.35,0.0,10.55,63.95,70.73,74.83,77.27,80.47,85.9,91.92,96.36,99.42,3966.75,337374.32,8760.0,0.63,342885541.56,100.0,100.0,8760.0,486007.08,486007.08,20.92,39142.19,39142.19,26873.57,26873.57,2600.7,2600.7,62.51,94.65,97.21,98.25,99.1,99.54,99.82,99.94,99.97,5550.42,58681.57,8760.0,486007.08,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.44,94.69,8295.0 -362,simulated,3B,2020.0,Manufacturing,Daggett,19000,DEER,0.91,2110283974.48,98.63,8640.0,100.0,1547934.49,1547934.49,83.31,240900.0,244245.83,37121.95,39824.87,0.0,0.0,66.28,72.98,78.7,83.44,87.8,91.56,94.6,97.13,99.0,5941.35,363424.06,8760.0,0.08,1917682630.2,100.0,100.0,8760.0,1337052.72,1337052.72,71.96,218913.54,218913.54,39859.01,39859.01,3378.21,3378.21,59.81,67.68,74.95,82.91,90.18,94.59,97.95,99.26,99.83,14861.76,402084.92,8760.0,1322555.06,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.86,98.63,8640.0 -363,simulated,3B,2020.0,OfficeLarge,Daggett,16000,DEER,0.19,1547843857.0,57.95,5076.0,100.0,928519.92,928519.92,57.12,176694.5,304933.78,21366.14,189996.4,0.0,9.61,61.85,70.68,75.35,78.68,81.0,84.53,89.42,94.55,99.04,0.0,267263.49,8760.0,0.63,286799742.3,100.0,100.0,8760.0,467350.09,467350.09,28.75,32739.7,32739.7,18005.61,18005.61,1870.51,1870.51,78.18,94.06,95.4,96.82,98.6,99.54,99.79,99.87,99.93,3461.25,36930.84,8760.0,467350.09,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.5,57.95,5076.0 -364,simulated,2B,2020.0,Academic,El Centro,14000,DEER,0.13,2556406983.52,98.39,8619.0,100.0,1599545.77,1599545.77,114.71,291827.28,296601.34,82125.47,87566.86,0.0,0.0,63.08,70.23,72.04,76.47,84.35,90.46,95.66,98.86,99.79,9348.48,599448.69,8760.0,0.86,328350289.7,100.0,100.0,8760.0,389613.56,389613.56,27.94,37482.91,37482.91,11956.77,11956.77,606.46,606.46,64.34,77.23,92.32,99.65,99.84,99.92,99.97,99.98,99.99,6295.13,68707.07,8760.0,388600.99,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.24,98.39,8619.0 -365,simulated,2B,2020.0,Academic,El Centro,44000,DEER,0.09,7473371059.75,99.91,8752.0,100.0,3335605.63,3335605.63,75.59,853124.55,853904.37,441798.1,442948.96,0.0,0.0,44.47,57.48,61.99,67.43,77.04,85.95,92.48,96.78,99.21,65108.35,1606845.66,8760.0,0.88,679719562.48,100.0,100.0,8760.0,551848.36,551848.36,12.51,77593.56,77593.56,68488.29,68488.29,5485.73,5485.73,45.72,68.65,89.26,97.51,99.52,99.76,99.87,99.95,99.98,14243.71,124386.06,8760.0,464040.74,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.17,99.91,8752.0 -366,simulated,2B,2020.0,Hospital,El Centro,23000,DEER,0.08,3145803069.68,95.48,8364.0,100.0,1423777.59,1423777.59,61.3,359109.94,376112.28,143502.34,165532.36,0.0,7.79,49.85,57.19,62.93,67.68,76.7,85.24,92.25,97.25,99.62,36256.33,692457.29,8760.0,0.86,236244971.76,100.0,100.0,8760.0,385861.25,385861.25,16.61,26968.6,26968.6,21406.09,21406.09,2041.54,2041.54,69.78,96.03,99.37,99.82,99.89,99.94,99.98,99.99,99.99,3623.79,42733.04,8760.0,385655.5,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.27,95.48,8364.0 -367,simulated,2B,2020.0,Manufacturing,El Centro,19000,DEER,0.17,4348319670.15,98.88,8662.0,100.0,1903412.66,1903412.66,102.44,496383.52,501999.5,323933.58,335128.58,0.0,0.0,44.36,52.28,61.35,70.65,77.74,83.76,89.55,94.45,99.35,14961.55,870426.77,8760.0,0.16,746839579.67,100.0,100.0,8760.0,1117440.26,1117440.26,60.14,85255.66,85255.66,20592.25,20592.25,2618.55,2618.55,80.27,85.56,90.54,94.13,97.18,98.98,99.67,99.93,99.97,5357.32,45717.61,8760.0,1098715.06,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.59,98.88,8662.0 -368,simulated,2B,2020.0,OfficeLarge,El Centro,16000,DEER,0.1,2551574215.72,68.28,5981.0,100.0,1165164.78,1165164.78,71.68,291275.6,426613.31,115153.81,426827.74,0.0,8.03,50.14,57.66,62.24,68.16,74.2,82.47,90.5,96.45,99.52,0.0,593956.79,8760.0,0.86,255020910.27,100.0,100.0,8760.0,433527.65,433527.65,26.67,29111.98,29111.98,17418.97,17418.97,1460.2,1460.2,72.69,96.71,99.53,99.71,99.85,99.93,99.97,99.97,99.99,2965.6,57958.29,8760.0,433527.65,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.37,68.28,5981.0 -369,simulated,4B,2020.0,Academic,Bishop,14000,DEER,0.95,656226083.94,98.09,8593.0,100.0,888687.5,888687.5,63.73,74911.65,76367.52,16312.85,17795.78,0.0,0.0,81.0,89.25,91.6,93.16,94.35,96.29,98.21,99.75,99.98,2704.09,75453.17,8760.0,0.38,624039460.94,100.0,100.0,8760.0,722883.12,722883.12,51.84,71237.38,71237.38,16509.22,16509.22,613.82,613.82,68.86,79.19,92.02,95.35,97.63,99.19,99.78,99.93,99.98,9431.43,139989.42,8760.0,705129.79,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.81,98.09,8593.0 -370,simulated,4B,2020.0,Academic,Bishop,44000,DEER,0.55,2200440255.58,99.54,8720.0,100.0,2036843.13,2036843.13,46.16,251191.81,252344.07,80645.62,81991.68,0.0,0.0,63.54,83.78,88.26,90.61,92.73,94.74,96.6,98.7,99.83,18542.41,318618.68,8760.0,0.57,1209933491.55,100.0,100.0,8760.0,1157587.88,1157587.88,26.23,138120.26,138120.26,77360.6,77360.6,8996.55,8996.55,58.57,80.22,90.41,94.14,96.91,98.79,99.49,99.82,99.95,20785.98,201136.9,8760.0,966734.04,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.57,99.54,8720.0 -371,simulated,4B,2020.0,Hospital,Bishop,23000,DEER,0.54,898197574.07,94.0,8234.0,100.0,865737.23,865737.23,37.27,102533.97,109083.99,43891.6,51777.99,0.0,9.73,69.69,84.93,88.13,90.01,92.23,93.8,96.27,98.08,99.93,3691.65,106487.0,8760.0,0.56,487890598.61,100.0,100.0,8760.0,475259.54,475259.54,20.46,55695.27,55695.27,38417.64,38417.64,3090.31,3090.31,54.59,87.07,91.12,94.1,96.63,98.37,99.55,99.85,99.94,6891.56,71576.0,8760.0,449592.44,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.55,94.0,8234.0 -372,simulated,4B,2020.0,Manufacturing,Bishop,19000,DEER,3.87,659172152.15,98.56,8634.0,100.0,859140.85,859140.85,46.24,75247.96,76346.09,15678.81,16976.36,0.0,0.0,82.49,87.36,90.27,92.66,94.92,96.62,98.2,99.46,99.92,5404.44,67666.27,8760.0,0.08,2549740468.19,100.0,100.0,8760.0,1248192.65,1248192.65,67.18,291066.26,291066.26,209855.02,209855.02,4165.12,4165.12,42.27,53.55,65.57,75.74,82.82,89.86,95.9,98.84,99.84,30899.19,489152.88,8760.0,1209521.79,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,1.45,98.56,8634.0 -373,simulated,4B,2020.0,OfficeLarge,Bishop,16000,DEER,0.48,755502469.97,51.29,4493.0,100.0,752573.48,752573.48,46.3,86244.57,168151.01,256.7,100567.06,0.0,7.67,70.56,80.01,87.52,90.91,92.68,93.94,95.1,96.79,99.37,0.0,104730.29,8760.0,0.5,358952944.1,100.0,100.0,8760.0,494712.98,494712.98,30.43,40976.36,40976.36,19255.47,19255.47,2261.12,2261.12,80.62,87.99,90.88,94.36,97.51,99.04,99.6,99.84,99.93,3769.69,34993.65,8760.0,494712.98,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.66,51.29,4493.0 -177,measured,3B,2010.0,Academic,San Francisco,6000,,1.04,207839780.5,89.65,7450.0,94.86,189752.31,189752.31,33.27,23726.0,26464.84,13471.85,18273.86,0.0,110.77,56.56,79.53,88.94,92.55,95.32,98.6,99.43,99.82,99.89,2109.17,32905.21,8310.0,0.57,221938040.66,94.28,59.58,4921.0,206024.44,206024.44,36.12,25335.39,42520.83,17311.65,39745.28,0.0,100.87,51.27,72.13,88.72,95.99,98.23,99.43,99.82,99.88,99.95,0.0,43641.52,8259.0,129542.64,36.6,16.37,15.9,1.1,8.9,11.2,12.1,13.0,14.6,15.9,17.5,19.1,20.1,21.2,24.5,1.09,49.86,4030.0 -178,measured,3B,2020.0,Academic,San Francisco,5000,,2.16,50485423.97,37.97,3150.0,94.71,254813.63,254813.63,47.29,5763.18,15180.02,0.0,4914.5,0.0,102.47,94.56,97.19,98.38,98.93,99.35,99.59,99.67,99.78,99.92,0.0,2740.41,8297.0,0.05,116421847.92,88.77,27.03,2102.0,325086.51,325086.51,60.33,13290.17,49164.76,0.0,34506.96,0.0,246.49,85.78,93.61,96.59,98.47,99.06,99.45,99.7,99.83,99.94,0.0,8301.58,7776.0,325086.51,34.1,15.32,14.9,0.6,7.9,9.8,10.7,11.5,13.2,14.9,16.7,18.4,19.4,20.6,23.5,1.28,11.27,876.0 -179,measured,3B,2020.0,Academic,San Francisco,11000,,2.47,636597588.34,65.95,5775.0,99.95,624374.05,624374.05,57.34,72670.96,110183.01,16506.98,58822.78,0.0,116.17,67.7,78.7,85.55,90.19,93.92,96.68,98.38,99.37,99.9,0.0,99556.8,8756.0,0.1,1573807984.08,99.98,89.04,7798.0,1094599.29,1094599.29,100.53,179658.45,201775.93,120064.11,154903.18,0.0,138.52,47.92,64.87,79.02,89.1,94.99,98.61,99.77,99.94,99.97,26981.38,295014.63,8758.0,1094599.29,39.4,15.03,14.4,-1.1,6.1,8.9,10.0,11.1,12.8,14.4,15.6,17.8,18.9,20.6,25.0,1.75,56.28,4928.0 -180,measured,3C,2020.0,Academic,San Francisco,1000,,1.28,16517441.34,16.54,1448.0,99.97,35843.32,35843.32,56.74,1885.55,11403.17,0.0,10732.89,0.0,101.24,87.08,89.32,91.74,94.05,96.14,97.72,99.08,99.82,99.93,0.0,0.0,8757.0,0.02,21112060.28,99.97,82.31,7208.0,57345.85,57345.85,90.77,2410.05,2927.97,553.37,584.37,0.0,238.11,91.17,93.82,95.46,97.02,98.17,98.7,99.09,99.37,99.68,461.88,651.55,8757.0,57345.85,45.0,14.63,13.3,-1.7,5.6,8.3,9.4,10.0,12.2,13.3,15.0,17.2,18.9,20.6,26.1,1.6,6.27,549.0 -181,measured,3B,2020.0,Academic,San Francisco,5000,,0.52,1103428037.78,79.42,6925.0,99.34,1628340.48,1628340.48,318.68,125962.1,158674.32,34525.58,69554.5,0.0,232.44,78.94,86.3,91.31,95.56,98.22,99.26,99.76,99.94,99.98,4862.31,116409.75,8702.0,0.4,532982974.36,94.51,51.33,4250.0,581984.49,581984.49,113.9,60842.81,118549.68,5331.43,94702.47,0.0,112.97,61.95,80.86,89.5,94.09,97.09,98.54,99.09,99.59,99.96,0.0,96672.0,8279.0,511636.03,34.1,15.25,14.7,0.6,7.8,9.7,10.5,11.4,13.0,14.7,16.5,18.3,19.4,20.6,23.6,0.36,36.0,2968.0 -182,measured,4A,2000.0,Academic,Portland,10000,,0.22,643327666.81,30.6,2683.0,99.82,767691.73,767691.73,73.13,73238.58,239342.47,0.0,234980.43,0.0,101.57,74.16,78.75,84.22,90.09,95.22,98.16,99.53,99.84,99.97,0.0,90914.53,8768.0,0.0,140765230.13,99.82,39.22,3439.0,308056.74,308056.74,29.34,16025.19,40857.47,0.0,33089.71,0.0,101.04,79.27,90.97,97.18,99.1,99.67,99.83,99.9,99.97,99.97,0.0,22636.54,8768.0,308056.74,35.6,13.87,14.4,-16.7,0.03,4.0,6.1,8.0,11.1,14.4,17.8,20.6,21.7,23.0,26.7,0.4,0.09,8.0 -183,measured,3C,2000.0,Office,San Francisco,19000,,1.85,565610603.86,55.71,2806.0,57.34,1047349.42,1047349.42,54.73,64567.42,116161.23,173.95,806.76,0.0,100.06,88.09,89.73,90.78,91.68,93.33,95.56,97.93,99.32,99.86,0.0,931.85,5023.0,0.19,1021513511.43,60.29,98.94,5225.0,945137.06,945137.06,49.39,116611.13,117860.93,49224.18,49919.75,0.0,499.15,69.12,80.67,88.73,93.07,95.08,96.52,98.26,99.32,99.89,30274.94,146330.48,5281.0,945137.06,30.8,14.65,14.1,6.4,11.2,12.1,12.5,12.9,13.5,14.1,14.9,15.7,16.2,16.8,18.6,0.9,54.84,2753.0 -184,measured,3C,,Warehouse,San Francisco,10000,,0.33,514735283.37,99.97,8755.0,99.98,357097.69,357097.69,37.28,58759.74,58779.87,48154.6,48160.79,0.0,3017.56,25.61,77.67,89.85,94.62,96.76,97.98,98.85,99.31,99.76,35041.71,67236.84,8758.0,0.84,171265074.19,98.54,58.31,5040.0,102743.35,102743.35,10.73,19550.81,33557.88,8468.74,17485.26,0.0,691.92,55.33,72.22,74.85,77.8,82.12,88.4,93.03,96.22,98.81,0.0,31447.14,8632.0,96447.24,36.7,14.21,13.6,4.4,10.0,11.1,11.7,12.2,12.8,13.6,14.4,15.6,16.1,17.2,19.15,0.29,58.26,5029.0 -185,measured,3C,,Warehouse,San Francisco,4000,,1.19,93908893.21,79.65,6769.0,97.01,87861.34,87861.34,20.39,10720.19,13458.44,3320.13,5313.86,0.0,103.4,64.73,69.04,84.24,96.49,98.67,99.33,99.64,99.84,99.95,2265.39,22344.91,8498.0,0.59,117527912.71,73.88,96.71,6259.0,52828.23,52828.23,12.26,13416.43,13873.0,13269.15,13827.69,0.0,113.78,22.22,41.46,58.75,80.66,92.92,97.53,99.63,99.92,99.95,5909.18,19869.96,6472.0,52828.23,32.8,14.8,14.4,3.9,10.0,11.7,12.2,12.8,13.6,14.4,15.6,16.7,17.2,17.8,20.0,0.6,71.38,4451.0 -186,measured,3C,2000.0,Office,San Francisco,12000,,1.15,308088814.69,100.0,8780.0,99.95,782071.38,782071.38,65.99,35073.86,35073.86,16216.0,16216.0,3425.41,3425.41,91.22,94.2,96.65,98.39,99.15,99.69,99.87,99.95,99.99,13814.71,18622.05,8780.0,0.22,355667631.02,99.94,28.92,2539.0,545795.18,545795.18,46.06,40490.4,140002.04,0.0,123661.73,0.0,211.57,74.85,81.9,91.54,94.85,97.35,98.97,99.73,99.93,99.99,0.0,57701.76,8779.0,522258.41,32.8,15.18,14.7,4.4,10.6,12.1,12.5,12.9,13.9,14.7,15.6,16.7,17.5,18.3,20.55,0.7,28.92,2539.0 -187,measured,3C,2010.0,Other/Gymnasium,San Francisco,4000,,2.71,101297546.82,19.99,1391.0,79.43,291730.57,291730.57,78.5,11563.65,57843.17,0.0,44685.33,0.0,794.67,87.12,92.02,95.54,97.53,98.63,99.24,99.6,99.87,99.9,0.0,0.0,6958.0,0.02,313653061.58,73.65,52.84,3415.0,355076.68,355076.68,95.55,35805.14,67865.68,1607.92,43842.35,0.0,112.53,70.86,80.94,87.28,92.33,95.06,96.93,98.42,99.38,99.92,0.0,47478.08,6452.0,355076.68,32.8,14.8,14.4,3.9,10.0,11.7,12.2,12.8,13.6,14.4,15.6,16.7,17.2,17.8,20.0,1.3,8.51,442.0 -188,measured,3C,2010.0,Office,San Francisco,15000,,0.83,646016020.35,100.0,7881.0,89.97,931066.11,931066.11,60.37,73746.12,73746.12,26583.46,26583.46,2267.23,2267.23,82.44,87.68,92.02,95.7,97.68,98.86,99.34,99.75,99.95,22557.32,41697.63,7881.0,0.58,536853341.86,89.51,63.45,4975.0,461427.34,461427.34,29.92,61284.63,96589.5,16437.85,43479.26,0.0,196.81,68.69,73.05,80.67,88.02,92.91,95.51,97.4,98.78,99.76,0.0,107161.71,7841.0,439631.34,36.7,14.26,13.9,4.4,10.0,11.11,11.7,12.2,12.8,13.9,14.4,15.6,16.15,17.2,19.4,0.5,63.43,4965.0 -189,measured,3C,2000.0,Lab,San Francisco,10000,,2.24,1360486467.82,98.77,8355.0,96.56,2175630.92,2175630.92,214.29,155306.67,157239.88,5056.49,5113.43,0.0,538.44,75.94,86.74,92.67,96.23,97.94,98.77,99.48,99.73,99.96,3623.93,197459.6,8459.0,0.24,3024521459.24,94.16,99.92,8424.0,1014599.17,1014599.17,99.93,345265.01,345558.28,302696.68,302837.22,0.0,68920.22,0.16,10.05,50.76,73.23,84.77,93.27,97.98,99.48,99.9,243806.49,420697.42,8248.0,1008953.83,36.7,14.21,13.6,4.4,10.0,11.1,11.7,12.2,12.8,13.6,14.4,15.6,16.1,17.2,19.15,0.47,98.68,8137.0 -190,measured,3C,2000.0,Lab,San Francisco,11000,,2.91,1065263920.04,89.79,7874.0,99.83,1421290.36,1421290.36,127.09,121273.21,135057.76,19910.8,34054.4,0.0,100.42,72.76,84.88,90.97,95.6,97.78,98.6,99.32,99.61,99.89,926.63,162065.68,8769.0,0.27,3094976258.79,99.72,99.85,8756.0,1440228.72,1440228.72,128.79,352342.47,352866.19,320906.01,321121.44,0.0,43551.32,3.68,40.07,75.34,90.4,96.88,99.05,99.69,99.91,99.98,239729.36,429814.43,8759.0,1440228.72,32.8,14.71,14.15,4.4,10.6,11.7,12.2,12.8,13.3,14.15,15.0,16.1,16.7,17.5,19.4,1.01,89.76,7862.0 -191,measured,3C,2000.0,Lab,San Francisco,7000,,1.97,2035052486.62,99.87,8519.0,97.11,2285465.78,2285465.78,311.9,231677.2,231976.34,75009.44,75079.05,0.0,168.93,72.33,82.79,90.3,94.94,97.51,98.7,99.46,99.77,99.96,63524.52,279491.86,8530.0,0.38,4007887337.85,97.02,99.86,8515.0,1119175.63,1119175.63,152.74,456271.33,456914.72,414705.69,415019.22,0.0,68530.89,0.16,0.54,22.62,58.62,74.99,88.29,97.43,99.26,99.8,341192.47,559657.9,8522.0,1065413.2,36.7,14.43,13.9,4.4,10.6,11.7,12.2,12.2,13.2,13.9,14.4,15.6,16.4,17.2,19.4,0.49,99.73,8499.0 -192,measured,3C,2000.0,Office,San Francisco,11000,,1.73,159844977.64,95.49,8191.0,97.64,549710.42,549710.42,49.16,18197.29,19057.16,11232.72,11943.74,0.0,263.48,93.63,96.4,98.31,99.2,99.72,99.9,99.97,99.98,99.99,2948.7,15310.27,8577.0,0.21,281265167.06,96.73,45.46,3863.0,256249.61,256249.61,22.91,32020.17,70431.11,0.0,63369.98,0.0,107.11,67.52,74.3,80.7,87.56,92.43,95.99,98.39,99.49,99.88,0.0,54241.04,8497.0,256249.61,32.8,15.14,14.45,4.4,10.6,11.95,12.2,12.8,13.9,14.45,15.6,16.7,17.2,18.3,20.55,0.47,44.14,3662.0 -193,measured,3C,2000.0,Office,San Francisco,10000,,0.35,592077596.32,98.29,7016.0,80.84,744701.93,744701.93,72.82,67404.1,68582.39,27810.27,31863.92,0.0,941.4,66.75,86.92,93.92,96.97,98.8,99.68,99.89,99.96,99.96,8551.74,101216.35,7101.0,0.51,211532425.97,82.13,31.58,2278.0,407309.87,407309.87,39.83,24081.56,76261.8,0.0,50675.68,0.0,120.4,81.26,88.74,93.51,96.2,97.82,98.86,99.47,99.86,99.97,0.0,22975.71,7214.0,401947.91,32.8,15.18,14.6,4.4,10.6,11.9,12.2,12.8,13.9,14.6,15.6,16.93,17.5,18.3,20.6,0.55,30.44,2081.0 -194,measured,3C,2000.0,Lab,San Francisco,9000,,3.78,1063254970.25,57.38,5013.0,99.46,1297817.68,1297817.68,145.67,121044.51,210964.67,4451.24,94724.62,0.0,1499.56,72.91,78.89,86.99,92.82,96.6,98.23,99.14,99.7,99.93,0.0,177368.41,8737.0,0.24,4018925594.06,99.4,99.12,8661.0,1355039.05,1355039.05,152.1,457527.96,461598.87,431416.06,432718.95,0.0,25842.26,1.0,2.5,38.08,80.05,94.41,97.66,99.28,99.81,99.92,382165.21,516354.94,8731.0,1277981.24,32.8,14.74,14.15,4.4,10.6,11.7,12.2,12.8,13.3,14.15,15.0,16.1,16.7,17.8,19.4,1.04,57.07,4982.0 -195,measured,3C,2000.0,Lab,San Francisco,8000,,1.2,5834740469.56,100.0,8767.0,99.08,2281556.96,2281556.96,295.32,664246.41,664246.41,618320.53,618320.53,57908.55,57908.55,6.55,27.38,60.21,80.49,91.41,96.43,98.54,99.53,99.95,439346.73,838877.65,8703.0,0.8,6999048903.87,99.93,99.83,8763.0,1754202.76,1754202.76,227.06,796795.18,798159.09,678659.98,680834.25,0.0,5377.73,0.22,3.46,28.38,50.84,53.87,65.08,92.87,99.28,99.81,502717.35,1113065.02,8778.0,1250762.15,32.8,14.85,14.4,4.4,10.6,11.7,12.2,12.8,13.3,14.4,15.0,16.4,17.2,17.8,20.0,0.77,99.83,8688.0 -196,measured,3C,2000.0,Lab,San Francisco,6000,,2.41,3037733803.96,100.0,8565.0,96.87,1585458.08,1585458.08,273.85,345825.8,345825.8,289813.52,289813.52,29921.12,29921.12,23.77,54.7,76.03,88.99,94.98,97.88,98.94,99.67,99.92,164208.98,468094.51,8509.0,0.49,7108567273.28,97.14,100.0,8539.0,1501404.73,1501404.73,259.33,809263.12,809263.12,794023.8,794023.8,328667.75,328667.75,0.0,0.0,0.19,10.83,40.64,71.46,89.83,97.6,99.72,674291.26,921086.07,8533.0,1435865.54,32.8,15.11,14.4,4.4,10.6,11.87,12.2,12.8,13.6,14.4,15.6,16.7,17.2,18.3,20.55,0.95,100.0,8273.0 -197,measured,4A,2020.0,Academic/Lab,Louisville,5000,,0.83,319161821.8,56.24,4913.0,99.44,189878.56,189878.56,39.3,36334.45,64600.33,1858.19,74393.67,0.0,102.12,53.93,58.04,64.97,72.65,86.35,97.12,99.68,99.94,99.98,0.0,79417.76,8735.0,0.65,265371472.3,99.95,84.28,7400.0,185223.47,185223.47,38.34,30210.78,35844.68,31358.82,37266.53,0.0,101.89,34.08,57.54,85.73,97.19,98.67,99.4,99.81,99.93,99.97,816.38,48661.81,8780.0,171752.61,38.3,16.39,18.3,-15.85,1.7,7.2,9.4,11.1,14.72,18.3,21.1,23.3,24.4,25.6,28.6,0.98,53.35,4660.0 -198,measured,4C,2010.0,Medical Office,Oregon,9000,,0.32,677222964.33,99.85,8574.0,98.03,383942.15,383942.15,44.6,77308.56,77425.77,40717.1,40783.04,0.0,2082.72,45.28,70.83,77.64,82.64,88.02,93.39,97.15,99.18,99.76,30460.34,98602.3,8587.0,0.75,217114745.68,98.03,64.95,5577.0,225329.19,225329.19,26.17,24784.79,38161.55,14545.12,32791.72,0.0,714.36,59.67,78.91,89.66,96.52,98.95,99.69,99.94,99.99,99.99,0.0,40563.97,8587.0,130481.83,37.8,11.89,11.1,-7.2,2.8,5.6,6.7,7.22,9.2,11.1,12.9,15.6,16.7,18.3,22.8,0.59,64.8,5564.0 -199,measured,3B,1990.0,Medical Office,San Francisco,4000,,1.47,495035117.09,93.36,7950.0,96.94,380705.18,380705.18,95.3,56356.46,60361.66,22654.39,25413.11,0.0,100.38,59.82,71.71,80.61,86.87,92.35,96.19,98.47,99.67,99.96,1856.61,88478.16,8515.0,0.39,729137348.45,96.94,99.99,8514.0,354580.83,354580.83,88.76,83007.44,83017.19,65907.29,65907.29,0.0,8570.86,1.96,59.21,80.72,87.19,92.95,97.09,99.03,99.65,99.89,53820.67,88190.58,8515.0,349908.83,41.7,16.66,15.6,0.0,8.3,10.79,11.7,12.3,13.9,15.6,17.2,19.4,20.6,22.2,26.7,0.93,93.35,7949.0 -200,measured,3B,1990.0,Medical Office,Los Angeles,6000,,0.13,1804589538.7,97.11,8528.0,99.98,867661.08,867661.08,155.84,205440.52,211559.41,183408.64,190488.87,0.0,103.31,35.36,48.18,67.81,79.48,86.81,95.01,98.35,99.7,99.93,59755.18,307805.22,8782.0,0.92,228694994.82,99.95,99.53,8739.0,253834.72,253834.72,45.59,26035.4,26157.55,26528.22,26628.35,0.0,227.0,47.3,92.79,98.12,99.29,99.75,99.89,99.93,99.98,99.99,7763.03,36187.2,8780.0,163110.77,45.6,18.7,17.2,4.4,10.0,12.2,13.3,13.9,15.6,17.2,19.4,21.7,22.8,24.4,29.4,0.29,96.69,8488.0 -201,measured,3B,2010.0,Lab,Los Angeles,12000,,0.57,4173233073.35,97.01,8167.0,95.83,2038651.21,2038651.21,164.99,475094.84,489756.11,352780.27,371559.9,0.0,128.95,35.91,54.26,67.49,78.08,86.74,92.43,96.21,98.76,99.68,108226.48,748499.3,8418.0,0.69,2344564574.93,99.87,100.0,8773.0,671644.89,671644.89,54.36,266913.09,266913.09,262676.67,262676.67,904.86,904.86,0.13,3.69,22.32,53.25,80.67,94.26,98.65,99.68,99.92,206638.55,319476.77,8773.0,669840.31,40.6,18.04,16.7,1.1,10.6,12.2,13.05,13.9,15.0,16.7,18.9,21.1,22.2,23.48,27.8,0.33,97.01,8166.0 -202,measured,3C,2010.0,Medical Office,San Francisco,21000,,4.79,296848435.38,99.89,8773.0,99.99,91803.05,91803.05,4.44,33794.22,33832.74,26526.6,26564.69,0.0,329.7,18.58,21.12,51.16,58.04,69.98,80.39,84.5,92.92,99.45,20810.24,49634.88,8783.0,0.25,1423268912.91,99.87,99.18,8701.0,589403.95,589403.95,28.52,162029.7,163370.48,138481.21,139134.03,0.0,506.28,6.99,37.02,65.62,82.5,93.01,94.52,96.87,98.45,99.89,99841.25,206470.03,8773.0,587186.38,42.8,15.92,14.4,-2.2,6.7,9.4,10.6,11.7,13.3,14.4,16.1,18.9,20.6,22.2,27.2,6.42,99.18,8701.0 -203,measured,3B,2020.0,Academic/Office,Los Angeles,8000,,0.77,1664286833.46,99.88,8670.0,98.82,641915.03,641915.03,85.47,189467.99,189686.52,156333.27,156561.5,0.0,3253.09,20.97,41.27,57.88,69.98,80.82,89.67,95.54,98.4,99.52,80978.28,284582.27,8680.0,0.67,1274819448.37,96.08,99.59,8413.0,311217.21,311217.21,41.44,145129.72,145734.07,153540.29,154003.55,0.0,8900.09,1.49,11.64,25.51,38.34,51.03,68.26,89.5,96.64,99.82,92003.89,194905.65,8440.0,276786.25,38.9,17.53,16.7,2.8,10.6,12.2,13.3,13.9,15.0,16.7,18.3,20.0,21.1,22.2,25.6,0.48,99.46,8295.0 -204,measured,3C,1980.0,Lab/Office,San Francisco,8000,,3.76,646836174.4,32.11,2819.0,99.95,672263.46,672263.46,85.43,73638.0,229351.41,0.0,204663.09,0.0,2110.82,69.79,72.3,83.47,91.65,94.86,96.85,98.18,99.31,99.73,0.0,154275.42,8780.0,0.18,2435226848.38,99.95,99.79,8762.0,832294.99,832294.99,105.77,277234.39,277803.92,245745.42,246100.55,0.0,2079.86,2.2,19.27,51.25,70.32,83.79,92.38,97.81,99.49,99.92,182924.62,360353.26,8780.0,832294.99,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.49,14.7,15.6,16.7,17.2,18.3,21.1,1.24,32.11,2819.0 -205,measured,3C,2010.0,Lab/Office,San Francisco,8000,,0.37,959843992.58,99.97,8778.0,99.97,459107.74,459107.74,61.1,109271.86,109309.2,84972.16,85020.5,0.0,3156.47,13.44,55.3,73.47,84.3,92.14,96.03,98.3,99.31,99.76,58814.65,143926.78,8781.0,0.91,351808681.19,99.97,98.82,8677.0,183377.66,183377.66,24.4,40051.08,40531.12,36823.41,37203.28,0.0,482.25,25.44,49.79,72.14,89.94,96.44,98.43,99.45,99.87,99.94,18132.09,58171.22,8781.0,151617.56,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.35,14.7,15.6,16.7,17.2,18.3,21.1,0.4,98.78,8674.0 -206,measured,3C,2010.0,Lab/Office,San Francisco,3000,,3.18,129922982.01,65.17,4275.0,71.36,400091.04,400091.04,124.01,14831.39,23376.46,967.43,10070.94,0.0,100.87,88.99,97.14,97.79,98.35,98.77,99.09,99.42,99.76,99.9,0.0,13716.01,6251.0,0.1,532196913.45,99.95,91.88,8045.0,295924.77,295924.77,91.72,60753.07,66122.3,64930.88,67971.79,0.0,129.79,27.6,44.55,75.53,92.7,97.85,99.35,99.76,99.93,99.98,25101.76,88342.57,8756.0,295924.77,38.9,13.87,13.9,0.6,7.8,10.0,10.6,11.7,12.8,13.9,15.0,16.1,16.7,17.8,20.0,0.74,55.72,3483.0 -207,measured,3C,2010.0,Lab/Office,San Francisco,4000,,0.88,289495095.3,49.18,1793.0,41.62,305523.37,305523.37,79.46,33047.39,67200.65,0.0,40223.96,0.0,101.49,70.93,80.97,86.26,90.67,93.94,96.13,98.19,99.51,99.86,0.0,39213.42,3646.0,0.22,255156391.64,41.62,99.51,3628.0,275831.16,275831.16,71.73,29127.44,29271.96,16050.01,16184.78,0.0,101.05,68.9,87.14,92.07,95.28,97.39,98.44,99.31,99.64,99.89,8648.54,33467.74,3646.0,275831.16,32.2,16.54,16.1,2.2,11.7,13.9,14.4,15.0,15.6,16.1,17.2,18.3,18.9,19.4,21.7,0.9,48.79,1779.0 -208,measured,3C,2000.0,Lab,San Francisco,9000,,1.27,770325489.32,70.05,6141.0,99.8,1041154.65,1041154.65,117.25,87696.44,125182.7,20419.71,37243.44,0.0,114.3,78.62,85.19,90.09,93.55,96.17,97.78,98.9,99.63,99.9,0.0,73368.09,8766.0,0.25,983590248.5,99.97,100.0,8781.0,702344.22,702344.22,79.1,111975.21,111975.21,76983.31,76983.31,2161.74,2161.74,45.89,73.98,86.55,92.15,95.36,97.67,99.05,99.64,99.9,42932.0,144137.9,8781.0,702344.22,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.35,14.7,15.6,16.7,17.2,18.3,21.1,0.67,70.05,6141.0 -209,measured,3C,1960.0,Lab,San Francisco,7000,,1.43,788710795.5,99.17,8687.0,99.73,454790.25,454790.25,67.38,89789.48,90544.01,62977.99,63048.33,0.0,114.3,6.51,74.12,84.68,90.16,93.78,96.31,97.93,99.22,99.77,54859.46,93343.79,8760.0,0.5,1127211082.8,99.74,97.82,8570.0,591479.98,591479.98,87.63,128325.49,131185.48,118941.05,120987.54,0.0,282.82,28.4,49.78,74.58,87.07,93.71,97.16,99.04,99.75,99.97,51049.36,178633.68,8761.0,503804.91,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.6,14.7,15.6,16.7,17.2,18.3,21.1,1.3,97.01,8494.0 -210,measured,3C,1990.0,Lab/Office,San Francisco,4000,,7.93,234634546.63,10.29,901.0,99.97,577071.12,577071.12,131.54,26784.77,260326.52,0.0,291133.64,0.0,2620.42,90.83,91.25,91.66,92.23,94.68,98.26,99.74,99.98,99.98,0.0,0.0,8757.0,0.04,1861604312.04,99.97,97.57,8544.0,720496.51,720496.51,164.24,212511.91,217809.78,191160.86,195322.92,0.0,2222.91,14.15,36.7,56.51,72.58,84.55,92.61,97.45,99.46,99.93,105845.28,301242.3,8757.0,720496.51,38.9,13.49,13.3,0.6,7.8,9.7,10.6,11.1,12.2,13.3,14.4,15.6,16.1,17.2,19.4,1.25,9.99,875.0 -211,measured,3C,2010.0,Tech HQ,San Francisco,46000,,0.35,2582417457.52,100.0,4092.0,46.71,986129.34,986129.34,21.23,294796.51,294796.51,212361.22,212361.22,69100.5,69100.5,6.89,45.45,64.78,73.53,81.04,87.95,94.09,97.87,99.63,146879.99,413930.59,4092.0,0.74,909546365.6,46.71,0.0,0.0,539193.84,539193.84,11.61,103829.49,217213.85,0.0,217173.59,0.0,6347.05,53.47,58.99,65.52,75.66,88.0,94.09,97.07,98.95,99.78,0.0,212761.5,4092.0,416681.11,35.0,18.59,17.8,2.8,11.7,14.4,15.0,15.6,16.7,17.8,19.4,21.1,22.2,23.3,26.1,0.55,47.8,1956.0 -212,measured,3C,2020.0,Tech HQ,San Francisco,70000,,0.34,7384106895.36,99.98,8528.0,97.37,2796141.93,2796141.93,40.13,842934.58,843132.26,703690.91,703761.25,0.0,58792.94,4.63,39.47,58.1,75.9,85.13,89.81,94.48,98.07,99.47,403123.33,1098993.64,8530.0,0.9,2562461069.62,94.11,95.63,7884.0,1286823.05,1286823.05,18.47,292518.39,305875.39,250128.47,257614.97,0.0,1926.21,9.81,52.04,78.53,90.15,94.77,97.09,98.59,99.44,99.83,184901.65,359522.0,8244.0,936041.39,35.0,15.74,15.6,1.4,8.3,10.6,11.7,12.8,13.9,15.6,16.7,18.3,19.4,20.6,23.9,0.46,95.61,7882.0 -213,measured,3C,2020.0,Medical Office,San Francisco,17000,,1.44,3037928687.03,100.0,8760.0,100.0,1475566.08,1475566.08,86.89,346795.51,346795.51,285203.21,285203.21,15885.65,15885.65,20.08,52.25,75.72,86.11,91.43,94.76,96.86,98.61,99.6,169015.27,435190.9,8760.0,0.92,4392853350.26,99.2,100.0,8690.0,2055848.94,2055848.94,121.06,501467.28,501467.28,419890.06,419890.06,20949.69,20949.69,15.65,48.34,74.18,85.72,91.68,94.93,96.96,98.84,99.7,258602.8,627567.36,8690.0,483206.58,36.44,15.5,14.78,6.66,11.04,12.16,12.63,13.07,13.9,14.78,15.62,16.82,17.66,18.62,21.17,1.39,100.0,8690.0 +building_id,load_type,ashrae_climate_zone,vintage,building_type,location,gea_grid_region,area_sqm,load_source_ref,annual_heating_cooling_ratio,chw_annual_load,chw_cooling_hour_ratio,chw_cooling_hours,chw_data_coverage,chw_max_load,chw_max_load_gt0,chw_max_load_per_area,chw_mean_load,chw_mean_load_gt0,chw_median_load,chw_median_load_gt0,chw_min_load,chw_min_load_gt0,chw_pct_below_10pct_max,chw_pct_below_20pct_max,chw_pct_below_30pct_max,chw_pct_below_40pct_max,chw_pct_below_50pct_max,chw_pct_below_60pct_max,chw_pct_below_70pct_max,chw_pct_below_80pct_max,chw_pct_below_90pct_max,chw_q25_load,chw_q75_load,chw_valid_hours,heat_recovery_heating_fraction,hhw_annual_load,hhw_data_coverage,hhw_heating_hour_ratio,hhw_heating_hours,hhw_max_load,hhw_max_load_gt0,hhw_max_load_per_area,hhw_mean_load,hhw_mean_load_gt0,hhw_median_load,hhw_median_load_gt0,hhw_min_load,hhw_min_load_gt0,hhw_pct_below_10pct_max,hhw_pct_below_20pct_max,hhw_pct_below_30pct_max,hhw_pct_below_40pct_max,hhw_pct_below_50pct_max,hhw_pct_below_60pct_max,hhw_pct_below_70pct_max,hhw_pct_below_80pct_max,hhw_pct_below_90pct_max,hhw_q25_load,hhw_q75_load,hhw_valid_hours,max_heating_load_after_heat_recovery,max_temp,mean_temp,median_temp,min_temp,q10_temp,q20_temp,q25_temp,q30_temp,q40_temp,q50_temp,q60_temp,q70_temp,q75_temp,q80_temp,q90_temp,ratio_of_peak_heating_and_cooling,simultaneous_heating_and_cooling_hour_ratio,simultaneous_heating_and_cooling_hours +1,simulated,5B,2022.0,Hospital,Denver,WestConnect_North,22000,DOE,0.49,2436511556.72,100.0,8760.0,100.0,1209329.17,1209329.17,53.9,278140.59,278140.59,169579.62,169579.62,454.13,454.13,43.92,59.43,71.43,78.68,84.84,89.58,92.16,95.8,99.0,52861.25,416217.84,8760.0,0.59,1197558184.73,100.0,100.0,8760.0,487444.06,487444.06,21.73,136707.56,136707.56,118922.73,118922.73,27237.47,27237.47,1.13,32.83,64.63,82.15,92.84,97.26,98.77,99.49,99.9,89336.27,172660.0,8760.0,486455.54,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.4,100.0,8760.0 +2,simulated,8,2022.0,HotelLarge,Fairbanks,TBD,11000,DOE,2.92,252608598.3,64.28,5631.0,100.0,357288.66,357288.66,31.49,28836.6,44860.34,1867.93,18065.68,0.0,41.76,75.97,86.35,90.74,93.9,96.16,97.92,99.18,99.53,99.89,0.0,33594.44,8760.0,0.02,736879759.49,100.0,82.09,7191.0,728037.11,728037.11,64.17,84118.69,102472.5,38541.71,56775.5,0.0,0.0,65.98,85.24,91.06,91.84,92.31,93.38,97.15,99.33,99.86,435.85,98757.51,8760.0,728037.11,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,2.04,46.38,4063.0 +3,simulated,4C,2004.0,HotelLarge,Seattle,NorthernGrid_West,11000,DOE,0.83,699874167.35,68.55,6005.0,100.0,521680.76,521680.76,45.98,79894.31,116548.57,14610.75,63974.42,0.0,228.0,63.17,72.65,79.84,85.02,89.14,91.97,95.29,97.89,99.37,0.0,121611.9,8760.0,0.31,581930174.0,100.0,100.0,8760.0,185574.8,185574.8,16.36,66430.39,66430.39,62184.5,62184.5,6.52,6.52,8.11,20.07,42.13,61.71,76.32,87.69,96.14,99.55,99.93,41870.55,91054.32,8760.0,185574.8,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.36,68.55,6005.0 +4,simulated,6B,2004.0,HotelLarge,Great Falls,NorthernGrid_East,11000,DOE,2.35,749717140.92,59.98,5254.0,100.0,695641.56,695641.56,61.32,85584.15,142694.55,8623.07,69514.09,0.0,727.73,70.02,77.5,83.14,87.8,91.44,94.82,96.88,98.57,99.71,0.0,114782.35,8760.0,0.06,1759013542.31,100.0,99.9,8751.0,893740.0,893740.0,78.78,200800.63,201007.15,136169.12,136408.53,0.0,0.04,43.79,55.7,69.45,80.48,86.99,90.48,94.12,97.45,98.28,28751.8,310492.43,8760.0,893740.0,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.28,59.87,5245.0 +5,simulated,5C,2022.0,OfficeLarge,Port Angeles,NorthernGrid_West,46000,DOE,0.87,351368786.4,28.18,2469.0,100.0,1285690.53,1285690.53,27.76,40110.59,142312.19,0.0,26698.08,0.0,0.02,91.18,94.33,96.4,97.96,98.53,99.01,99.3,99.81,99.93,0.0,498.55,8760.0,0.02,306453494.93,100.0,37.51,3286.0,603812.53,603812.53,13.04,34983.28,93260.35,0.0,65173.26,0.0,0.0,80.49,88.65,93.31,96.43,98.12,99.29,99.75,99.92,99.97,0.0,21256.6,8760.0,603812.53,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.47,11.93,1045.0 +6,simulated,3B,2022.0,Hospital,San Diego,CAISO,22000,DOE,0.25,3931884826.43,100.0,8760.0,100.0,1455306.82,1455306.82,64.86,448845.3,448845.3,322078.07,322078.07,50584.74,50584.74,10.23,43.66,63.76,76.54,82.75,86.21,88.81,91.13,96.16,196870.92,555212.3,8760.0,0.96,981758267.08,100.0,100.0,8760.0,293384.31,293384.31,13.08,112072.86,112072.86,112065.48,112065.48,14824.43,14824.43,0.13,4.45,26.62,56.18,85.45,96.21,99.06,99.83,99.98,86103.94,134153.26,8760.0,225937.99,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.2,100.0,8760.0 +7,simulated,4B,2004.0,Hospital,Albuquerque,WestConnect_South,22000,DOE,0.39,4869589634.27,100.0,8760.0,100.0,2304083.92,2304083.92,102.7,555889.23,555889.23,461709.42,461709.42,37866.75,37866.75,22.18,49.97,63.22,81.97,92.39,98.78,99.85,99.93,99.98,245413.62,795916.26,8760.0,0.89,1899324135.65,100.0,100.0,8760.0,446091.17,446091.17,19.88,216817.82,216817.82,207446.04,207446.04,26462.9,26462.9,0.15,2.47,12.79,33.94,59.1,75.94,86.4,94.82,98.9,161828.77,264392.29,8760.0,379128.97,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.19,100.0,8760.0 +8,simulated,1A,2004.0,HotelLarge,Miami,FRCC,11000,DOE,0.03,4963636981.33,99.25,8694.0,100.0,882074.25,882074.25,77.75,566625.23,570926.73,615326.56,616489.45,0.0,1327.34,3.95,7.16,10.48,14.53,19.93,31.5,50.58,73.81,95.21,487590.58,710206.88,8760.0,0.94,169302175.54,100.0,90.68,7944.0,121531.94,121531.94,10.71,19326.73,21311.96,15461.71,17058.7,0.0,0.25,39.51,71.5,85.17,92.63,96.61,98.72,99.73,99.91,99.97,7091.98,26915.77,8760.0,121531.94,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.14,89.93,7878.0 +9,simulated,2A,2022.0,OutPatientHealthCare,Tampa,FRCC,4000,DOE,0.09,1361849053.07,100.0,8760.0,100.0,445742.22,445742.22,117.18,155462.22,155462.22,125080.11,125080.11,40.51,40.51,14.26,29.05,54.41,69.46,73.98,79.67,86.46,93.84,99.34,79359.3,233908.06,8760.0,0.98,122399119.03,100.0,100.0,8760.0,99823.43,99823.43,26.24,13972.5,13972.5,11066.68,11066.68,3472.24,3472.24,43.42,80.42,91.83,96.84,98.96,99.58,99.83,99.94,99.97,6716.17,17543.47,8760.0,97849.88,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.22,100.0,8760.0 +10,simulated,5C,2022.0,HotelLarge,Port Angeles,NorthernGrid_West,11000,DOE,1.01,202113402.4,75.67,6629.0,100.0,347144.22,347144.22,30.6,23072.31,30489.27,5200.21,11093.21,0.0,102.12,79.78,89.33,94.13,96.92,98.54,99.37,99.67,99.86,99.97,304.25,25213.94,8760.0,0.09,204922991.14,100.0,84.6,7411.0,119088.24,119088.24,10.5,23393.04,27651.19,12432.83,20265.25,0.0,0.0,49.59,61.16,71.11,79.05,86.15,91.99,96.83,99.45,99.93,262.18,41643.18,8760.0,118834.29,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.34,60.27,5280.0 +11,simulated,5C,2022.0,OutPatientHealthCare,Port Angeles,NorthernGrid_West,4000,DOE,0.43,319045645.95,99.35,8703.0,100.0,225255.73,225255.73,59.22,36420.74,36659.27,21603.3,21768.51,0.0,15.66,52.39,74.68,85.61,91.15,94.14,96.12,97.49,99.22,99.89,13987.72,45554.49,8760.0,0.82,136024112.81,100.0,100.0,8760.0,116844.97,116844.97,30.72,15527.87,15527.87,11030.02,11030.02,3696.05,3696.05,53.04,82.01,91.84,96.48,98.32,99.17,99.71,99.94,99.99,7091.76,19225.37,8760.0,116844.97,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.52,99.35,8703.0 +12,simulated,7,2022.0,OfficeLarge,International Falls,MISO_North,46000,DOE,0.64,1016753503.17,44.83,3927.0,100.0,3745411.78,3745411.78,80.86,116067.75,258913.55,0.0,22224.51,0.0,0.01,88.85,94.1,96.74,99.3,99.87,99.92,99.94,99.95,99.98,0.0,10370.94,8760.0,0.0,646204771.69,100.0,46.18,4045.0,2133282.91,2133282.91,46.05,73767.67,159753.96,0.0,55129.26,0.0,0.01,89.81,95.78,97.43,98.18,98.52,99.26,99.66,99.89,99.94,0.0,40999.72,8760.0,2133282.91,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.57,17.57,1539.0 +13,simulated,4A,2004.0,HotelLarge,New York,NYISO,11000,DOE,0.33,1790748738.49,71.1,6228.0,100.0,833357.52,833357.52,73.45,204423.37,287531.91,47990.98,250887.79,0.0,502.86,53.42,59.62,64.42,69.22,74.43,80.62,88.08,95.14,98.64,0.0,423612.75,8760.0,0.29,589758706.99,100.0,99.69,8733.0,283057.43,283057.43,24.95,67324.05,67532.2,55574.35,55819.94,0.0,3.17,22.28,50.78,67.4,82.11,91.94,97.26,98.96,99.58,99.89,30616.03,98890.14,8760.0,283057.43,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.34,70.79,6201.0 +14,simulated,5B,2022.0,OutPatientHealthCare,Denver,WestConnect_North,4000,DOE,0.32,452394658.98,95.66,8380.0,100.0,264587.79,264587.79,69.55,51643.23,53985.04,25594.71,28584.57,0.0,10.3,50.56,66.61,78.72,84.11,87.82,90.98,94.05,97.51,99.68,11369.31,68508.04,8760.0,0.58,143256486.44,100.0,100.0,8760.0,202992.78,202992.78,53.36,16353.48,16353.48,9377.48,9377.48,2579.66,2579.66,76.77,91.21,96.44,98.32,99.14,99.63,99.85,99.93,99.95,5635.08,18988.16,8760.0,202992.78,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.77,95.66,8380.0 +15,simulated,4C,2004.0,OutPatientHealthCare,Seattle,NorthernGrid_West,4000,DOE,0.7,607612669.22,99.95,8756.0,100.0,339358.15,339358.15,89.21,69362.18,69393.86,41222.73,41267.02,0.0,30.78,42.43,57.63,74.7,87.39,93.26,96.42,98.2,99.21,99.66,25157.76,102368.82,8760.0,0.7,425249699.57,100.0,100.0,8760.0,191543.73,191543.73,50.35,48544.49,48544.49,43621.53,43621.53,8381.12,8381.12,8.53,41.31,68.7,86.23,94.67,98.29,99.33,99.79,99.94,29340.92,63184.38,8760.0,191452.47,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.56,99.95,8756.0 +16,simulated,5C,2022.0,Hospital,Port Angeles,NorthernGrid_West,22000,DOE,1.03,1501479883.15,100.0,8760.0,100.0,1024824.22,1024824.22,45.68,171401.81,171401.81,114942.33,114942.33,19633.13,19633.13,43.76,75.34,88.12,92.13,94.61,95.83,97.72,99.24,99.84,72260.07,203444.35,8760.0,0.71,1543704330.43,100.0,100.0,8760.0,319749.76,319749.76,14.25,176221.96,176221.96,174185.17,174185.17,71150.76,71150.76,0.0,0.0,3.3,12.59,37.45,64.36,84.82,96.93,99.82,146414.61,206864.18,8760.0,285158.84,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.31,100.0,8760.0 +17,simulated,2B,2004.0,OutPatientHealthCare,Tucson,WestConnect_South,4000,DOE,0.21,1278112396.48,100.0,8760.0,100.0,436379.8,436379.8,114.72,145903.24,145903.24,130915.62,130915.62,6991.15,6991.15,16.77,29.51,49.99,70.39,79.24,85.19,91.04,95.89,99.42,77286.47,192338.47,8760.0,0.9,269755909.53,100.0,100.0,8760.0,158950.42,158950.42,41.78,30794.05,30794.05,22330.98,22330.98,4098.83,4098.83,26.46,63.4,82.9,91.04,95.41,98.08,99.2,99.7,99.94,15579.47,40038.99,8760.0,134010.67,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.36,100.0,8760.0 +18,simulated,3A,2004.0,OutPatientHealthCare,Atlanta,SERTP,4000,DOE,0.25,1280027171.71,99.3,8699.0,100.0,481263.98,481263.98,126.51,146121.82,147146.47,119486.41,120118.55,0.0,13.54,14.49,39.74,60.76,75.89,83.2,87.45,91.11,94.73,98.4,67393.96,188972.3,8760.0,0.84,325360576.9,100.0,100.0,8760.0,270108.89,270108.89,71.01,37141.62,37141.62,29879.73,29879.73,7183.73,7183.73,44.86,80.41,93.54,97.75,99.16,99.67,99.82,99.92,99.97,18738.8,47609.37,8760.0,270108.89,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.56,99.3,8699.0 +19,simulated,6B,2022.0,OutPatientHealthCare,Great Falls,NorthernGrid_East,4000,DOE,0.57,360757769.34,89.83,7869.0,100.0,280848.98,280848.98,73.83,41182.39,45845.44,19435.93,22466.11,0.0,8.57,60.7,75.71,85.62,89.69,92.47,95.08,97.57,98.73,99.73,8998.9,54792.09,8760.0,0.41,205380180.03,100.0,100.0,8760.0,238514.95,238514.95,62.7,23445.23,23445.23,11941.94,11941.94,2598.65,2598.65,73.31,87.56,93.12,95.98,97.56,98.44,98.98,99.43,99.63,6499.25,25406.98,8760.0,238514.95,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,0.85,89.83,7869.0 +20,simulated,7,2022.0,OutPatientHealthCare,International Falls,MISO_North,4000,DOE,0.98,346602093.43,74.34,6512.0,100.0,365327.14,365327.14,96.04,39566.45,53225.14,15366.14,26193.24,0.0,11.27,68.74,82.13,88.69,91.89,95.58,97.6,98.8,99.62,99.91,0.0,52051.9,8760.0,0.2,338493106.16,100.0,100.0,8760.0,264106.23,264106.23,69.43,38640.77,38640.77,17462.94,17462.94,3273.37,3273.37,60.27,75.11,85.13,90.81,94.01,96.14,97.68,98.36,99.06,7918.22,52525.86,8760.0,264106.23,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.72,74.34,6512.0 +21,simulated,3B,2004.0,Hospital,El Paso,WestConnect_South,22000,DOE,0.28,6420134657.62,100.0,8760.0,100.0,3187894.39,3187894.39,142.09,732892.08,732892.08,747831.44,747831.44,88781.81,88781.81,21.08,46.2,67.88,89.73,98.94,99.39,99.69,99.86,99.97,345984.67,1047452.97,8760.0,0.97,1824798830.79,100.0,100.0,8760.0,426654.79,426654.79,19.02,208310.37,208310.37,204176.73,204176.73,16244.09,16244.09,0.09,1.07,9.27,30.13,56.51,78.29,89.6,97.0,99.57,161344.24,246569.66,8760.0,296411.59,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.13,100.0,8760.0 +22,simulated,8,2004.0,Hospital,Fairbanks,TBD,22000,DOE,1.68,2429164027.96,68.6,6009.0,100.0,1251056.63,1251056.63,55.76,277301.83,404254.29,153259.18,312817.65,0.0,0.13,46.75,58.85,71.31,77.16,78.26,87.03,93.94,97.66,99.51,0.0,417397.83,8760.0,0.31,4092122481.35,100.0,100.0,8760.0,1355884.98,1355884.98,60.43,467137.27,467137.27,362375.6,362375.6,151694.27,151694.27,0.0,26.51,54.99,67.69,77.4,86.27,94.19,98.76,99.67,266874.43,640348.34,8760.0,1355884.98,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.08,68.6,6009.0 +23,simulated,3A,2022.0,HotelLarge,Atlanta,SERTP,11000,DOE,0.06,1338907252.1,91.44,8010.0,100.0,539583.07,539583.07,47.56,152843.29,167154.46,98624.04,131508.46,0.0,80.78,43.21,51.28,57.8,64.37,70.62,80.79,90.59,95.87,99.16,8125.27,296468.77,8760.0,0.14,85585486.4,100.0,54.82,4802.0,117533.9,117533.9,10.36,9770.03,17822.88,68.64,3601.91,0.0,0.0,79.05,83.4,88.01,91.78,94.71,97.1,98.9,99.62,99.94,0.0,5163.1,8760.0,116714.59,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.22,46.27,4053.0 +24,simulated,1A,2022.0,OfficeLarge,Miami,FRCC,46000,DOE,0.0,5493620546.09,89.79,7866.0,100.0,2226735.16,2226735.16,48.07,627125.63,698400.78,513636.29,591739.08,0.0,1365.35,31.99,44.7,58.69,67.28,75.74,82.02,96.48,99.59,99.86,40672.09,1088359.6,8760.0,0.94,669632.19,100.0,1.42,124.0,83967.64,83967.64,1.81,76.44,5400.26,0.0,579.35,0.0,0.2,99.78,99.85,99.9,99.94,99.95,99.97,99.99,99.99,99.99,0.0,0.0,8760.0,15853.65,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.04,1.42,124.0 +25,simulated,3B,2022.0,HotelLarge,San Diego,CAISO,11000,DOE,0.04,800013370.4,98.28,8609.0,100.0,421762.07,421762.07,37.18,91325.73,92927.56,63791.14,65587.8,0.0,183.99,37.68,59.46,72.09,81.58,88.84,93.7,96.94,98.93,99.78,23647.39,139587.62,8760.0,0.47,29089967.59,100.0,69.21,6063.0,94167.33,94167.33,8.3,3320.77,4797.95,254.57,1294.11,0.0,0.02,92.59,95.08,96.77,98.16,98.93,99.38,99.67,99.82,99.94,0.0,2549.53,8760.0,93507.55,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.22,67.49,5912.0 +26,simulated,8,2004.0,OutPatientHealthCare,Fairbanks,TBD,4000,DOE,2.44,344536891.68,60.0,5256.0,100.0,270242.45,270242.45,71.04,39330.7,65551.16,10955.56,36824.43,0.0,14.59,63.24,74.25,78.14,85.48,90.92,94.49,97.16,98.64,99.71,0.0,62428.63,8760.0,0.17,839828172.44,100.0,100.0,8760.0,400318.99,400318.99,105.24,95870.8,95870.8,66094.59,66094.59,8652.92,8652.92,29.34,57.33,74.14,82.88,87.32,90.98,94.33,96.97,98.53,36200.01,122654.96,8760.0,400318.99,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.48,60.0,5256.0 +27,simulated,5A,2004.0,HotelLarge,Chicago,PJM_West,11000,DOE,0.44,1615158189.0,90.07,7890.0,100.0,873118.73,873118.73,76.96,184378.79,204709.53,30850.19,70384.08,0.0,269.85,56.62,62.81,67.98,72.57,78.42,86.95,94.41,98.57,99.74,6475.23,386079.54,8760.0,0.27,712535875.97,100.0,99.66,8730.0,799443.13,799443.13,70.46,81339.71,81619.23,61063.76,61324.83,0.0,1.17,62.18,88.49,95.88,98.49,99.44,99.63,99.63,99.69,99.74,31305.8,105753.74,8760.0,799443.13,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.92,89.73,7860.0 +28,simulated,2A,2022.0,Hospital,Tampa,FRCC,22000,DOE,0.16,7033587609.72,100.0,8760.0,100.0,1854822.03,1854822.03,82.67,802920.96,802920.96,823452.11,823452.11,28513.31,28513.31,11.7,22.32,30.26,39.39,63.11,75.07,83.56,91.58,99.24,434934.66,1109537.37,8760.0,0.96,1125189955.32,100.0,100.0,8760.0,324045.35,324045.35,14.44,128446.34,128446.34,129920.07,129920.07,59764.16,59764.16,0.0,0.43,18.93,49.61,86.21,96.62,99.41,99.9,99.99,103983.7,148795.59,8760.0,284605.62,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.17,100.0,8760.0 +29,simulated,6A,2004.0,OfficeLarge,Rochester,NYISO,46000,DOE,1.04,2574363281.52,45.53,3988.0,100.0,2851372.82,2851372.82,61.56,293877.09,645527.4,0.0,496820.31,0.0,0.0,69.19,79.75,86.47,90.78,93.49,96.03,98.9,99.6,99.9,0.0,438886.17,8760.0,0.01,2665825529.44,100.0,61.52,5389.0,3278996.41,3278996.41,70.79,304317.98,494679.07,22474.34,277638.91,0.0,2.81,71.6,81.69,89.13,94.04,96.58,98.32,99.32,99.79,99.9,0.0,411766.85,8760.0,3278996.41,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.15,14.27,1250.0 +30,simulated,3C,2022.0,HotelLarge,San Jose,CAISO,11000,DOE,0.13,588423217.27,92.43,8097.0,100.0,431432.5,431432.5,38.03,67171.6,72671.76,35950.42,42609.04,0.0,173.95,54.1,72.09,81.32,88.52,93.76,96.75,98.53,99.53,99.91,11651.15,97041.5,8760.0,0.24,74810531.7,100.0,75.62,6624.0,126598.96,126598.96,11.16,8540.02,11293.86,781.18,2308.91,0.0,0.0,85.25,89.6,92.67,94.47,95.92,97.2,98.08,98.81,99.52,0.02,5392.84,8760.0,126598.96,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.29,68.05,5961.0 +31,simulated,5A,2022.0,HotelLarge,Chicago,PJM_West,11000,DOE,0.22,849021947.75,81.54,7143.0,100.0,571984.55,571984.55,50.42,96920.31,118860.7,12809.98,36787.53,0.0,101.0,62.45,68.57,73.45,78.84,85.25,92.69,97.18,99.29,99.81,1808.03,189674.42,8760.0,0.07,188985456.71,100.0,66.0,5782.0,519305.59,519305.59,45.77,21573.68,32685.14,1437.97,21674.71,0.0,0.02,84.1,97.65,99.34,99.63,99.65,99.7,99.7,99.76,99.78,0.0,34990.95,8760.0,519305.59,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.91,47.59,4169.0 +32,simulated,5C,2004.0,HotelLarge,Port Angeles,NorthernGrid_West,11000,DOE,1.41,441141683.83,63.53,5565.0,100.0,552495.92,552495.92,48.7,50358.64,79270.74,7343.36,27905.54,0.0,148.02,74.86,82.84,88.57,92.69,95.76,97.57,99.04,99.87,99.99,0.0,56160.76,8760.0,0.24,620949851.36,100.0,100.0,8760.0,162566.93,162566.93,14.33,70884.69,70884.69,68220.71,68220.71,1464.33,1464.33,4.91,11.72,26.85,46.72,62.13,76.08,88.52,96.97,99.67,47367.84,95791.49,8760.0,162566.93,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.29,63.53,5565.0 +33,simulated,1A,2022.0,HotelLarge,Miami,FRCC,11000,DOE,0.0,2854087295.08,100.0,8760.0,100.0,591831.33,591831.33,52.17,325809.05,325809.05,347448.14,347448.14,5063.07,5063.07,2.55,7.44,14.22,21.22,32.95,53.76,78.82,90.84,97.93,259867.71,402074.34,8760.0,1.0,323480.03,100.0,15.19,1331.0,5963.0,5963.0,0.53,36.93,243.04,0.0,83.7,0.0,0.02,98.42,99.42,99.78,99.86,99.92,99.95,99.97,99.97,99.98,0.0,0.0,8760.0,-1347.6,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.01,15.19,1331.0 +34,simulated,3C,2004.0,OfficeLarge,San Jose,CAISO,46000,DOE,0.18,2426393146.56,76.99,6744.0,100.0,2243807.93,2243807.93,48.44,276985.52,359785.46,63513.77,185391.81,0.0,0.01,64.29,76.37,83.74,89.59,93.16,97.67,99.0,99.6,99.94,0.42,417413.46,8760.0,0.24,433077069.37,100.0,43.52,3812.0,1390243.57,1390243.57,30.01,49438.02,113608.88,0.0,57417.95,0.0,0.79,86.64,95.07,98.33,99.34,99.69,99.86,99.97,99.98,99.98,0.0,37433.71,8760.0,1390243.57,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.62,31.54,2763.0 +35,simulated,3C,2004.0,OfficeLarge,San Francisco,CAISO,46000,DOE,0.31,1421695827.21,73.03,6397.0,100.0,1587960.4,1587960.4,34.28,162294.04,222244.15,14539.21,98490.03,0.0,0.01,69.7,81.08,87.91,92.82,95.4,97.18,98.28,99.11,99.85,0.0,223886.44,8760.0,0.24,442024535.43,100.0,46.77,4097.0,1064390.0,1064390.0,22.98,50459.42,107889.81,0.0,62462.41,0.0,1.62,82.37,91.39,97.2,99.13,99.66,99.86,99.92,99.97,99.99,0.0,51696.14,8760.0,1064390.0,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.67,33.73,2955.0 +36,simulated,2A,2022.0,OfficeLarge,Houston,ERCOT,46000,DOE,0.01,3806479471.36,69.53,6091.0,100.0,2314362.25,2314362.25,49.96,434529.62,624935.06,142978.84,494600.61,0.0,0.03,52.66,63.45,72.56,78.22,83.4,89.6,99.52,99.91,99.98,0.0,771419.64,8760.0,0.06,53533966.88,100.0,14.01,1227.0,673636.3,673636.3,14.54,6111.18,43629.96,0.0,12516.39,0.0,0.02,97.09,98.53,99.32,99.77,99.9,99.93,99.95,99.98,99.99,0.0,0.0,8760.0,673636.3,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.29,6.79,595.0 +37,simulated,3C,2022.0,Hospital,San Jose,CAISO,22000,DOE,0.36,3289212968.83,100.0,8760.0,100.0,1408960.88,1408960.88,62.8,375480.93,375480.93,264178.56,264178.56,44478.46,44478.46,15.51,53.63,71.52,81.37,87.26,90.08,92.29,94.08,97.18,182896.55,463447.45,8760.0,0.91,1198857141.48,100.0,100.0,8760.0,336327.84,336327.84,14.99,136855.84,136855.84,134075.78,134075.78,30552.81,30552.81,0.05,1.96,19.47,50.64,81.2,93.3,97.13,99.02,99.9,109233.95,157419.89,8760.0,276034.62,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.24,100.0,8760.0 +38,simulated,5A,2004.0,OfficeLarge,Buffalo,NYISO,46000,DOE,0.76,2467030572.0,48.37,4237.0,100.0,2498062.98,2498062.98,53.93,281624.49,582258.81,0.0,469978.51,0.0,0.0,66.3,77.17,85.49,90.1,93.31,95.66,98.87,99.67,99.85,0.0,451594.67,8760.0,0.01,1873297877.84,100.0,56.15,4919.0,2288704.76,2288704.76,49.41,213846.79,380829.01,7325.24,209453.57,0.0,1.51,73.14,82.05,87.88,92.01,95.74,98.06,99.29,99.77,99.93,0.0,266784.65,8760.0,2288704.76,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.92,14.54,1274.0 +39,simulated,2A,2004.0,OfficeLarge,Houston,ERCOT,46000,DOE,0.06,8571800920.3,98.49,8628.0,100.0,3351492.25,3351492.25,72.35,978516.09,993486.43,891930.23,908847.18,0.0,0.26,34.2,43.64,53.78,64.62,74.73,86.59,93.71,97.74,99.61,93506.17,1683614.47,8760.0,0.26,472948751.32,100.0,31.3,2742.0,2066529.56,2066529.56,44.61,53989.58,172483.13,0.0,64337.48,0.0,0.29,91.37,95.68,98.01,99.03,99.55,99.81,99.91,99.95,99.98,0.0,5079.47,8760.0,2066449.84,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.62,29.81,2611.0 +40,simulated,1A,2004.0,OfficeLarge,Miami,FRCC,46000,DOE,0.0,11848239201.05,100.0,8760.0,100.0,3061699.57,3061699.57,66.1,1352538.72,1352538.72,1393692.09,1393692.09,901.22,901.22,11.74,19.16,29.11,39.25,55.76,67.87,88.06,94.61,98.49,782175.04,1951993.45,8760.0,0.81,38715347.11,100.0,11.6,1016.0,498380.36,498380.36,10.76,4419.56,38105.66,0.0,10546.24,0.0,0.78,97.24,98.65,99.22,99.46,99.74,99.89,99.93,99.95,99.99,0.0,0.0,8760.0,487176.07,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.16,11.6,1016.0 +41,simulated,2A,2022.0,OutPatientHealthCare,Houston,ERCOT,4000,DOE,0.11,1222099992.63,99.98,8758.0,100.0,428969.55,428969.55,112.77,139509.13,139540.99,113730.99,113748.73,0.0,36.06,19.51,34.57,58.03,72.59,77.71,82.67,87.97,92.53,98.45,62370.07,189564.74,8760.0,0.93,134000620.21,100.0,100.0,8760.0,111253.0,111253.0,29.25,15296.87,15296.87,11696.98,11696.98,3422.13,3422.13,47.2,80.51,92.15,96.66,98.61,99.41,99.75,99.89,99.95,7017.19,19096.32,8760.0,108506.3,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.26,99.98,8758.0 +42,simulated,4B,2004.0,HotelLarge,Albuquerque,WestConnect_South,11000,DOE,0.53,1439196112.2,81.19,7112.0,100.0,686574.85,686574.85,60.52,164291.79,202361.66,80493.1,155887.62,0.0,732.69,47.66,57.35,64.94,72.21,79.43,86.23,92.02,96.99,99.58,8322.72,301452.68,8760.0,0.15,764118919.15,100.0,99.24,8693.0,398956.92,398956.92,35.16,87228.19,87900.49,24751.29,25254.46,0.0,0.02,57.1,64.08,69.61,75.07,80.72,86.43,91.36,95.47,98.68,7618.61,158849.8,8760.0,398956.92,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.58,80.42,7045.0 +43,simulated,3A,2004.0,HotelLarge,Sacramento,CAISO,11000,DOE,0.28,1482033419.97,81.88,7173.0,100.0,753352.46,753352.46,66.4,169181.9,206612.77,95228.17,164777.81,0.0,889.05,46.75,57.24,66.18,72.73,81.62,90.57,96.59,99.13,99.86,8981.21,323719.96,8760.0,0.49,421168865.57,100.0,99.79,8742.0,130186.09,130186.09,11.47,48078.64,48177.63,42768.47,42863.82,0.0,0.01,12.12,26.46,45.31,59.83,71.55,80.31,88.95,95.1,98.49,25107.87,69850.2,8760.0,130186.09,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.17,81.68,7155.0 +44,simulated,3A,2004.0,Hospital,Atlanta,SERTP,22000,DOE,0.27,8487501493.63,99.99,8759.0,100.0,2904596.57,2904596.57,129.46,968892.86,969003.48,964176.12,964202.97,0.0,17713.25,5.75,23.3,41.56,68.52,84.03,94.04,98.39,99.33,99.84,603677.24,1269253.31,8760.0,0.96,2276951814.22,100.0,100.0,8760.0,641141.51,641141.51,28.58,259926.01,259926.01,251633.47,251633.47,53350.56,53350.56,0.05,1.35,16.75,53.52,82.21,94.25,97.99,99.68,99.94,210038.85,299138.7,8760.0,588189.59,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.22,99.99,8759.0 +45,simulated,5A,2022.0,Hospital,Buffalo,NYISO,22000,DOE,0.65,2580581941.23,100.0,8760.0,100.0,1488990.76,1488990.76,66.37,294586.98,294586.98,146160.8,146160.8,441.66,441.66,50.18,65.49,75.88,82.65,87.92,92.04,94.73,96.85,99.18,54846.57,429273.75,8760.0,0.55,1664863502.44,100.0,100.0,8760.0,516546.73,516546.73,23.02,190052.91,190052.91,169659.77,169659.77,66969.42,66969.42,0.0,8.09,42.59,63.48,79.28,91.78,97.84,99.59,99.95,131022.02,242684.91,8760.0,515756.7,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.35,100.0,8760.0 +46,simulated,3A,2022.0,OutPatientHealthCare,Atlanta,SERTP,4000,DOE,0.14,829862985.74,99.29,8698.0,100.0,374386.55,374386.55,98.42,94733.22,95408.48,69549.21,70230.45,0.0,13.92,34.68,52.79,71.23,79.17,84.21,88.58,91.56,94.6,97.98,23460.32,125630.25,8760.0,0.78,118315751.98,100.0,100.0,8760.0,172034.46,172034.46,45.22,13506.36,13506.36,8596.74,8596.74,3149.76,3149.76,78.65,93.11,97.15,98.68,99.39,99.73,99.81,99.92,99.97,5690.58,15087.09,8760.0,172034.46,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.46,99.29,8698.0 +47,simulated,8,2004.0,OfficeLarge,Fairbanks,TBD,46000,DOE,3.33,1202792725.79,30.21,2646.0,100.0,1453006.39,1453006.39,31.37,137305.11,454570.19,0.0,452651.3,0.0,0.01,79.12,80.55,84.18,88.76,92.85,95.88,97.48,98.62,99.68,0.0,3422.34,8760.0,0.0,4008388792.38,100.0,67.89,5947.0,3172912.98,3172912.98,68.5,457578.63,674018.63,85491.43,320245.07,0.0,2.72,65.94,73.76,79.02,84.21,89.2,93.69,97.48,99.28,99.91,0.0,704379.88,8760.0,3172912.98,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,2.18,9.2,806.0 +48,simulated,3B,2022.0,OutPatientHealthCare,El Paso,WestConnect_South,4000,DOE,0.12,751680751.67,99.97,8757.0,100.0,319627.66,319627.66,84.02,85808.3,85837.7,65301.27,65325.91,0.0,55.96,30.57,49.04,69.81,77.25,82.71,86.96,90.87,95.34,98.95,23076.07,115657.07,8760.0,0.91,89714416.71,100.0,100.0,8760.0,108589.27,108589.27,28.55,10241.37,10241.37,7034.06,7034.06,1854.11,1854.11,71.53,91.46,96.39,98.31,99.17,99.6,99.76,99.9,99.95,4845.88,11718.34,8760.0,106923.82,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.34,99.97,8757.0 +49,simulated,4B,2004.0,OfficeLarge,Albuquerque,WestConnect_South,46000,DOE,0.18,2928576199.86,61.11,5353.0,100.0,2082007.66,2082007.66,44.95,334312.35,547090.64,37999.94,414604.36,0.0,0.0,60.59,69.5,77.12,83.41,87.77,91.06,96.61,98.8,99.77,0.0,563436.4,8760.0,0.03,538876043.17,100.0,43.13,3778.0,1381840.49,1381840.49,29.83,61515.53,142635.27,0.0,49463.79,0.0,2.15,86.26,91.38,95.4,97.83,98.87,99.5,99.83,99.92,99.97,0.0,27121.85,8760.0,1381840.49,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.66,15.62,1368.0 +50,simulated,3B,2004.0,HotelLarge,San Diego,CAISO,11000,DOE,0.25,1860346568.43,90.68,7944.0,100.0,846994.22,846994.22,74.66,212368.33,234182.6,175136.86,198710.39,0.0,361.97,33.13,48.74,65.09,75.48,85.23,91.14,95.46,98.07,99.5,46222.7,334662.28,8760.0,0.58,461448480.23,100.0,100.0,8760.0,298189.55,298189.55,26.28,52676.77,52676.77,40998.73,40998.73,0.14,0.14,27.05,74.33,87.71,92.17,94.6,96.71,98.32,99.33,99.76,28617.56,60413.8,8760.0,298189.55,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.35,90.68,7944.0 +51,simulated,4B,2004.0,OutPatientHealthCare,Albuquerque,WestConnect_South,4000,DOE,0.38,833651813.27,99.86,8748.0,100.0,355892.99,355892.99,93.56,95165.73,95296.27,83247.71,83444.59,0.0,27.03,36.45,46.12,61.62,76.95,83.88,88.8,93.22,96.68,99.28,24357.54,136675.19,8760.0,0.69,319699861.47,100.0,100.0,8760.0,194862.9,194862.9,51.23,36495.42,36495.42,29971.39,29971.39,6594.41,6594.41,28.89,64.46,83.86,92.67,96.69,98.66,99.53,99.83,99.95,17802.69,47281.44,8760.0,194862.9,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.55,99.86,8748.0 +52,simulated,5A,2004.0,OutPatientHealthCare,Buffalo,NYISO,4000,DOE,0.76,653774723.21,89.52,7842.0,100.0,443785.36,443785.36,116.66,74631.82,83368.37,32450.68,42533.35,0.0,18.26,55.81,63.98,79.41,88.82,92.56,95.7,97.89,99.22,99.83,13433.3,119428.89,8760.0,0.43,495408393.45,100.0,100.0,8760.0,290877.09,290877.09,76.47,56553.47,56553.47,45434.61,45434.61,8126.87,8126.87,28.95,62.74,82.93,91.5,95.63,97.73,98.8,99.52,99.86,26617.57,73760.21,8760.0,290877.09,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.66,89.52,7842.0 +53,simulated,2B,2022.0,Hospital,Tucson,WestConnect_South,22000,DOE,0.18,4940618906.62,100.0,8760.0,100.0,1638624.95,1638624.95,73.03,563997.59,563997.59,567940.06,567940.06,37398.89,37398.89,16.05,32.45,43.6,61.12,75.78,84.35,91.72,99.71,99.98,225103.54,804379.87,8760.0,0.94,869369986.9,100.0,100.0,8760.0,246417.64,246417.64,10.98,99243.15,99243.15,94168.02,94168.02,13824.2,13824.2,0.15,6.38,26.63,54.33,73.44,90.05,97.25,99.16,99.78,72166.75,125311.49,8760.0,186701.21,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.15,100.0,8760.0 +54,simulated,3C,2022.0,Hospital,San Francisco,CAISO,22000,DOE,0.45,2712429680.37,100.0,8760.0,100.0,1421822.18,1421822.18,63.37,309638.09,309638.09,220621.48,220621.48,55867.63,55867.63,14.08,61.87,79.33,88.95,93.41,95.71,97.68,98.58,99.54,170409.72,382103.82,8760.0,0.95,1220024012.01,100.0,100.0,8760.0,289052.83,289052.83,12.88,139272.15,139272.15,138826.36,138826.36,18755.54,18755.54,0.06,0.49,5.81,24.99,57.43,85.09,95.95,98.87,99.83,115682.37,160550.56,8760.0,213588.51,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.2,100.0,8760.0 +55,simulated,5B,2004.0,HotelLarge,Denver,WestConnect_North,11000,DOE,1.14,1066763219.95,70.06,6137.0,100.0,684698.19,684698.19,60.35,121776.62,173824.87,29818.24,122107.86,0.0,713.7,58.31,66.7,74.26,80.65,86.16,91.16,95.9,98.7,99.85,0.0,212193.21,8760.0,0.08,1214689768.54,100.0,99.77,8740.0,625258.83,625258.83,55.11,138663.22,138980.52,62423.92,62725.23,0.0,0.01,50.03,57.69,67.0,75.37,83.54,90.02,94.12,97.76,99.19,11589.69,247253.14,8760.0,625258.83,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.91,69.83,6117.0 +56,simulated,3B,2004.0,OfficeLarge,El Paso,WestConnect_South,46000,DOE,0.06,3733721861.75,64.0,5606.0,100.0,3820068.86,3820068.86,82.47,426223.96,666022.45,61503.6,538666.47,0.0,0.01,62.51,75.34,83.98,93.86,98.88,99.94,99.99,99.99,99.99,0.0,742985.53,8760.0,0.06,234272504.78,100.0,25.94,2272.0,929466.59,929466.59,20.07,26743.44,103112.9,0.0,34663.79,0.0,1.96,91.36,94.6,96.69,98.33,99.14,99.61,99.79,99.89,99.95,0.0,109.02,8760.0,929466.59,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.24,12.43,1089.0 +57,simulated,5A,2022.0,OutPatientHealthCare,Chicago,PJM_West,4000,DOE,0.34,566614611.27,91.19,7988.0,100.0,407776.08,407776.08,107.2,64682.03,70933.23,32597.37,42119.31,0.0,14.07,53.7,72.24,84.2,88.2,91.7,94.85,97.53,99.33,99.87,12964.7,87947.1,8760.0,0.46,194336552.67,100.0,100.0,8760.0,240397.45,240397.45,63.2,22184.54,22184.54,11250.88,11250.88,3486.51,3486.51,74.2,88.46,94.17,96.74,98.21,98.94,99.46,99.62,99.78,6729.76,24883.93,8760.0,240397.45,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.59,91.19,7988.0 +58,simulated,5A,2004.0,HotelLarge,Buffalo,NYISO,11000,DOE,0.64,1138178679.52,59.38,5202.0,100.0,755385.94,755385.94,66.58,129929.07,218796.36,11264.45,158171.66,0.0,933.92,62.09,69.61,75.64,79.74,84.11,89.43,93.96,97.83,99.67,0.0,219245.27,8760.0,0.21,729582027.66,100.0,99.98,8758.0,350429.53,350429.53,30.89,83285.62,83304.64,65533.16,65561.69,0.0,0.24,22.09,52.93,70.27,81.75,89.9,95.29,98.37,99.49,99.87,37533.6,117577.49,8760.0,350429.53,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.46,59.36,5200.0 +59,simulated,8,2004.0,HotelLarge,Fairbanks,TBD,11000,DOE,3.97,469683422.29,46.79,4099.0,100.0,487036.96,487036.96,42.93,53616.83,114584.88,0.0,61317.63,0.0,164.8,74.58,80.59,85.03,88.97,91.61,94.24,96.19,98.33,99.81,0.0,50823.44,8760.0,0.06,1866102423.56,100.0,100.0,8760.0,1114738.61,1114738.61,98.26,213025.39,213025.39,100991.16,100991.16,717.88,717.88,52.01,67.33,80.75,89.43,91.5,91.83,92.05,92.63,97.81,46586.16,287625.25,8760.0,1114738.61,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,2.29,46.79,4099.0 +60,simulated,3B,2004.0,HotelLarge,Los Angeles,CAISO,11000,DOE,0.19,2459068630.14,94.76,8301.0,100.0,1124830.38,1124830.38,99.15,280715.6,296237.64,235308.15,251177.85,0.0,692.54,29.13,48.21,64.09,76.4,86.1,93.0,98.26,99.74,99.99,89765.06,436238.98,8760.0,0.72,458306935.06,100.0,99.91,8752.0,392723.95,392723.95,34.62,52318.14,52365.97,47162.84,47168.88,0.0,0.07,37.61,84.39,95.33,97.96,98.94,99.55,99.92,99.93,99.94,28656.56,64738.22,8760.0,392723.95,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.35,94.67,8293.0 +61,simulated,2B,2022.0,OutPatientHealthCare,Tucson,WestConnect_South,4000,DOE,0.09,881227596.26,100.0,8760.0,100.0,340539.0,340539.0,89.52,100596.76,100596.76,75085.5,75085.5,5886.23,5886.23,24.62,45.05,64.19,72.89,80.0,85.33,90.08,95.13,99.2,34956.05,146050.71,8760.0,0.98,77959886.53,100.0,100.0,8760.0,84036.51,84036.51,22.09,8899.53,8899.53,6392.4,6392.4,2455.54,2455.54,65.35,89.66,95.58,98.26,99.22,99.75,99.87,99.97,99.99,4641.34,10240.35,8760.0,65314.2,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.25,100.0,8760.0 +62,simulated,5A,2004.0,OutPatientHealthCare,Chicago,PJM_West,4000,DOE,0.56,843533836.16,91.12,7982.0,100.0,525433.82,525433.82,138.13,96293.82,105679.51,48584.0,80644.02,0.0,13.41,50.61,61.59,78.34,87.09,90.75,94.2,97.29,99.2,99.83,18687.51,145839.76,8760.0,0.49,468324696.02,100.0,100.0,8760.0,351077.33,351077.33,92.29,53461.72,53461.72,41203.95,41203.95,7883.47,7883.47,41.93,76.43,90.66,95.4,97.41,98.69,99.32,99.59,99.79,24016.72,67859.16,8760.0,351077.33,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.67,91.12,7982.0 +63,simulated,3B,2022.0,OfficeLarge,El Paso,WestConnect_South,46000,DOE,0.03,2698880000.3,64.86,5682.0,100.0,2175520.85,2175520.85,46.97,308091.32,474987.68,24278.79,272103.31,0.0,0.02,63.56,74.78,80.61,84.9,87.81,93.55,97.88,98.92,99.5,0.0,441094.56,8760.0,0.04,85676522.2,100.0,15.65,1371.0,532973.25,532973.25,11.51,9780.42,62491.99,0.0,22284.67,0.0,0.02,93.94,96.4,98.05,99.08,99.54,99.77,99.86,99.92,99.98,0.0,0.0,8760.0,532973.25,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.24,6.67,584.0 +64,simulated,2A,2022.0,HotelLarge,Houston,ERCOT,11000,DOE,0.02,2014942271.45,95.95,8405.0,100.0,602537.17,602537.17,53.11,230016.24,239731.38,252054.58,266627.98,0.0,134.21,28.74,34.95,40.87,48.58,57.43,70.8,86.14,94.05,98.92,37378.82,375314.85,8760.0,0.21,44717060.72,100.0,40.72,3567.0,109271.56,109271.56,9.63,5104.69,12536.32,0.0,1513.78,0.0,0.0,88.31,91.67,93.76,95.32,96.87,98.16,99.18,99.78,99.99,0.0,580.25,8760.0,109271.56,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.18,36.67,3212.0 +65,simulated,7,2022.0,Hospital,International Falls,MISO_North,22000,DOE,1.08,1916006315.6,95.92,8403.0,100.0,1916157.26,1916157.26,85.4,218722.18,228014.56,78591.37,85714.53,0.0,56.49,69.29,80.62,86.24,89.39,95.58,98.05,99.43,99.94,99.99,17437.99,254982.35,8760.0,0.34,2073453229.32,100.0,100.0,8760.0,1124217.59,1124217.59,50.11,236695.57,236695.57,182804.38,182804.38,57795.38,57795.38,13.13,60.96,80.47,92.33,95.29,96.3,98.5,99.32,99.85,132673.55,294971.42,8760.0,1124217.59,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.59,95.92,8403.0 +66,simulated,8,2022.0,OutPatientHealthCare,Fairbanks,TBD,4000,DOE,2.16,217273257.16,60.24,5277.0,100.0,217045.68,217045.68,57.06,24802.88,41173.63,7229.15,23356.68,0.0,9.96,67.96,79.92,87.13,91.48,94.41,96.29,97.53,98.53,99.59,0.0,29977.25,8760.0,0.12,469937425.13,100.0,100.0,8760.0,267341.17,267341.17,70.28,53645.82,53645.82,26669.97,26669.97,3528.68,3528.68,50.09,64.42,77.04,84.09,88.04,91.64,94.63,96.44,97.72,9592.59,75344.57,8760.0,267341.17,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.23,60.24,5277.0 +67,simulated,5A,2022.0,OutPatientHealthCare,Buffalo,NYISO,4000,DOE,0.5,425432569.01,89.98,7882.0,100.0,334530.26,334530.26,87.94,48565.36,53975.21,23142.42,28054.47,0.0,10.87,59.05,74.69,85.5,89.95,93.05,95.87,97.91,99.17,99.79,9325.71,67506.16,8760.0,0.42,210878817.0,100.0,100.0,8760.0,198079.65,198079.65,52.07,24072.92,24072.92,13408.09,13408.09,3484.97,3484.97,62.73,82.23,90.65,94.73,97.11,98.47,99.33,99.78,99.95,7389.71,30443.74,8760.0,198079.65,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.59,89.98,7882.0 +68,simulated,3A,2004.0,Hospital,Sacramento,CAISO,22000,DOE,0.32,7405444208.36,100.0,8760.0,100.0,1938593.14,1938593.14,86.4,845370.34,845370.34,835300.35,835300.35,170782.67,170782.67,0.1,6.56,21.21,43.87,63.44,86.82,93.72,97.8,99.61,615439.05,1038387.35,8760.0,1.0,2376406617.86,100.0,100.0,8760.0,447969.63,447969.63,19.97,271279.29,271279.29,270470.92,270470.92,80352.6,80352.6,0.0,0.01,1.02,8.69,25.96,48.97,73.44,88.24,97.32,221733.8,317399.11,8760.0,207059.78,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.23,100.0,8760.0 +69,simulated,5A,2022.0,OfficeLarge,Buffalo,NYISO,46000,DOE,0.27,1187903364.55,39.29,3442.0,100.0,2252264.01,2252264.01,48.62,135605.41,345120.09,0.0,132645.23,0.0,0.0,83.54,88.87,92.13,94.32,95.66,98.44,99.55,99.83,99.97,0.0,30337.85,8760.0,0.0,326446834.71,100.0,39.24,3437.0,1199184.47,1199184.47,25.89,37265.62,94980.17,0.0,31635.24,0.0,0.01,89.28,95.08,97.82,98.84,99.38,99.74,99.89,99.97,99.98,0.0,9753.84,8760.0,1199184.47,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.53,6.87,602.0 +70,simulated,6B,2022.0,Hospital,Great Falls,NorthernGrid_East,22000,DOE,0.82,1822665667.77,98.17,8600.0,100.0,1394374.61,1394374.61,62.15,208066.86,211937.87,99159.11,101999.15,0.0,95.93,60.17,76.68,83.7,87.41,91.06,95.94,98.62,99.76,99.99,49362.86,255698.96,8760.0,0.49,1487964652.01,100.0,100.0,8760.0,935660.88,935660.88,41.7,169858.98,169858.98,142596.25,142596.25,22007.74,22007.74,19.09,70.25,90.31,95.27,97.72,98.06,98.73,99.5,99.89,104636.08,202001.81,8760.0,935660.88,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,0.67,98.17,8600.0 +71,simulated,7,2004.0,OfficeLarge,International Falls,MISO_North,46000,DOE,1.38,2212204972.37,38.76,3395.0,100.0,2971909.03,2971909.03,64.16,252534.81,651606.77,0.0,561585.58,0.0,0.01,72.79,81.43,88.53,93.21,95.92,98.84,99.54,99.89,99.97,0.0,379191.78,8760.0,0.01,3049956633.88,100.0,64.47,5648.0,3359305.08,3359305.08,72.52,348168.57,540006.49,39607.3,307820.13,0.0,3.35,69.18,80.63,87.12,91.53,95.46,97.95,99.26,99.81,99.93,0.0,470511.42,8760.0,3359305.08,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,1.13,12.96,1135.0 +72,simulated,3B,2004.0,OutPatientHealthCare,El Paso,WestConnect_South,4000,DOE,0.27,1055450933.85,99.99,8759.0,100.0,403116.61,403116.61,105.97,120485.27,120499.02,108059.54,108078.07,0.0,300.47,26.29,38.33,57.21,74.25,81.66,87.16,92.6,96.88,99.44,37781.2,163401.13,8760.0,0.82,282116397.83,100.0,100.0,8760.0,178734.82,178734.82,46.99,32205.07,32205.07,24800.34,24800.34,3724.77,3724.77,33.2,65.64,85.55,93.29,97.11,98.89,99.61,99.85,99.95,15900.11,42089.35,8760.0,175005.39,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.44,99.99,8759.0 +73,simulated,3B,2004.0,OfficeLarge,Los Angeles,CAISO,46000,DOE,0.05,3839780173.09,89.09,7804.0,100.0,2554780.91,2554780.91,55.15,438331.07,492027.19,246878.89,323521.7,0.0,0.01,50.71,66.86,76.94,84.52,90.61,95.68,98.39,99.71,99.95,18531.02,714391.5,8760.0,0.43,178014383.61,100.0,29.62,2595.0,1343074.72,1343074.72,29.0,20321.28,68598.99,0.0,36726.96,0.0,0.02,95.03,98.85,99.73,99.94,99.95,99.98,99.98,99.98,99.99,0.0,2976.32,8760.0,1343074.72,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.53,25.1,2199.0 +74,simulated,4C,2022.0,OfficeLarge,Seattle,NorthernGrid_West,46000,DOE,0.43,640024520.5,36.12,3164.0,100.0,1787930.66,1787930.66,38.6,73062.16,202283.35,0.0,60074.96,0.0,0.01,88.38,93.2,95.56,96.83,97.57,98.78,99.52,99.86,99.99,0.0,9164.7,8760.0,0.02,277416432.45,100.0,32.45,2843.0,1023453.48,1023453.48,22.1,31668.54,97578.77,0.0,64924.7,0.0,0.01,87.11,95.05,98.56,99.6,99.85,99.91,99.97,99.98,99.98,0.0,5286.08,8760.0,1023453.48,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.57,8.78,769.0 +75,simulated,3C,2004.0,Hospital,San Jose,CAISO,22000,DOE,0.44,5732856640.04,100.0,8760.0,100.0,2182979.31,2182979.31,97.3,654435.69,654435.69,598891.11,598891.11,182019.28,182019.28,0.76,20.37,61.53,83.77,91.04,96.39,99.35,99.93,99.99,464777.24,792621.41,8760.0,0.99,2495954218.5,100.0,100.0,8760.0,474007.83,474007.83,21.13,284926.28,284926.28,289694.67,289694.67,59993.19,59993.19,0.0,0.07,0.8,8.65,27.01,47.53,74.67,90.98,98.64,231444.34,332363.21,8760.0,228907.82,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.22,100.0,8760.0 +76,simulated,3B,2022.0,HotelLarge,Los Angeles,CAISO,11000,DOE,0.03,1104906208.27,98.32,8613.0,100.0,538137.97,538137.97,47.43,126130.85,128283.55,94500.09,96972.88,0.0,282.71,33.22,54.58,68.65,78.57,86.21,92.98,97.13,99.02,99.79,34714.44,193862.94,8760.0,0.54,33755738.02,100.0,75.84,6644.0,204747.84,204747.84,18.05,3853.39,5080.63,999.55,1892.76,0.0,0.01,95.49,98.14,99.12,99.68,99.92,99.92,99.92,99.94,99.95,0.03,3062.37,8760.0,204747.84,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.38,74.17,6497.0 +77,simulated,5A,2004.0,OfficeLarge,Chicago,PJM_West,46000,DOE,0.45,3486798720.26,55.55,4866.0,100.0,5374737.33,5374737.33,116.03,398036.38,716563.65,88.98,559342.38,0.0,0.0,71.46,86.02,93.76,97.77,99.53,99.89,99.94,99.98,99.98,0.0,642190.9,8760.0,0.02,1570263470.89,100.0,50.7,4441.0,2805013.69,2805013.69,60.56,179253.82,353583.31,98.86,179039.23,0.0,4.13,79.68,88.15,93.08,96.2,98.04,99.09,99.61,99.86,99.94,0.0,185668.16,8760.0,2805013.69,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.52,15.88,1391.0 +78,simulated,2B,2022.0,HotelLarge,Tucson,WestConnect_South,11000,DOE,0.01,1464354856.66,98.76,8651.0,100.0,487083.05,487083.05,42.93,167163.8,169270.01,170278.45,174192.79,0.0,368.82,27.19,37.44,45.96,54.78,67.66,81.75,91.22,97.28,99.68,41951.74,268876.27,8760.0,0.31,21591412.86,100.0,31.15,2729.0,111526.97,111526.97,9.83,2464.77,7911.84,0.0,577.82,0.0,0.0,93.88,96.19,97.55,98.37,98.92,99.34,99.61,99.85,99.95,0.0,79.99,8760.0,111526.97,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.23,29.91,2620.0 +79,simulated,4A,2022.0,OutPatientHealthCare,New York,NYISO,4000,DOE,0.26,613087852.18,97.08,8504.0,100.0,399807.17,399807.17,105.1,69987.2,72094.06,35865.11,39035.24,0.0,16.01,51.88,68.98,81.78,86.53,90.53,93.68,96.39,98.52,99.51,14358.66,93500.41,8760.0,0.63,156504980.11,100.0,100.0,8760.0,191115.39,191115.39,50.24,17865.87,17865.87,11115.74,11115.74,3520.52,3520.52,70.59,89.58,95.37,97.9,99.05,99.57,99.84,99.94,99.98,6661.13,21303.32,8760.0,191115.39,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.48,97.08,8504.0 +80,simulated,3B,2022.0,Hospital,Los Angeles,CAISO,22000,DOE,0.25,4345410067.84,99.97,8757.0,100.0,1510271.66,1510271.66,67.31,496051.38,496221.32,406280.47,406378.65,0.0,0.48,6.05,37.07,55.89,70.38,80.0,85.83,90.08,94.84,99.55,226374.84,665105.59,8760.0,0.98,1065615394.28,100.0,100.0,8760.0,605483.9,605483.9,26.99,121645.59,121645.59,120731.07,120731.07,19730.45,19730.45,1.71,50.41,96.8,99.83,99.93,99.93,99.95,99.97,99.98,99011.15,142307.51,8760.0,605483.9,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.4,99.97,8757.0 +81,simulated,5A,2004.0,Hospital,Buffalo,NYISO,22000,DOE,0.6,4724011441.07,97.83,8570.0,100.0,2798938.64,2798938.64,124.75,539270.71,551226.54,342171.9,353434.86,0.0,15.58,42.05,59.62,67.27,88.86,96.31,99.33,99.83,99.91,99.98,183480.82,918467.14,8760.0,0.71,2832926321.5,100.0,100.0,8760.0,815284.47,815284.47,36.34,323393.42,323393.42,301201.94,301201.94,46621.48,46621.48,0.03,1.15,24.21,59.19,80.3,91.77,97.27,99.36,99.82,246240.53,381979.05,8760.0,815284.47,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.29,97.83,8570.0 +82,simulated,6B,2022.0,HotelLarge,Great Falls,NorthernGrid_East,11000,DOE,0.75,425850320.77,78.22,6852.0,100.0,387477.52,387477.52,34.15,48613.05,62149.78,9585.65,22748.18,0.0,45.3,69.58,78.64,83.76,87.88,91.43,94.77,97.4,98.81,99.81,780.38,55776.99,8760.0,0.06,318117422.51,100.0,68.49,6000.0,555884.93,555884.93,49.0,36314.77,53019.57,8582.43,37114.35,0.0,0.0,75.57,95.61,97.66,97.95,98.04,98.09,98.38,99.09,99.89,0.0,54394.32,8760.0,555884.93,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.43,46.79,4099.0 +83,simulated,4A,2022.0,Hospital,New York,NYISO,22000,DOE,0.44,3532479573.89,100.0,8760.0,100.0,1693110.85,1693110.85,75.46,403251.09,403251.09,238052.89,238052.89,526.73,526.73,42.19,58.87,67.13,74.44,84.69,90.08,93.82,96.77,99.43,73422.95,689360.85,8760.0,0.68,1539620923.37,100.0,100.0,8760.0,464967.78,464967.78,20.72,175755.81,175755.81,162299.53,162299.53,65267.8,65267.8,0.0,6.07,31.74,62.2,80.71,93.45,98.52,99.69,99.98,132518.75,217326.13,8760.0,464038.28,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.27,100.0,8760.0 +84,simulated,4C,2022.0,OutPatientHealthCare,Seattle,NorthernGrid_West,4000,DOE,0.36,370952266.13,99.61,8726.0,100.0,261269.39,261269.39,68.68,42346.15,42511.15,26235.81,26361.31,0.0,13.76,49.87,75.06,87.05,91.83,94.29,96.4,98.11,99.13,99.65,16697.7,52194.21,8760.0,0.85,132275863.61,100.0,100.0,8760.0,113458.18,113458.18,29.83,15099.98,15099.98,10812.95,10812.95,3605.18,3605.18,52.61,81.79,92.01,96.61,98.4,99.26,99.59,99.83,99.95,6889.46,18935.01,8760.0,113382.46,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.43,99.61,8726.0 +85,simulated,5C,2004.0,OfficeLarge,Port Angeles,NorthernGrid_West,46000,DOE,1.15,720788266.65,36.2,3171.0,100.0,1577756.16,1577756.16,34.06,82281.77,227306.3,0.0,82079.37,0.0,0.01,85.15,89.78,93.57,95.81,97.36,98.34,99.13,99.87,99.97,0.0,10803.74,8760.0,0.02,831262982.08,100.0,52.15,4568.0,1470853.06,1470853.06,31.75,94893.03,181975.26,506.63,105174.29,0.0,0.02,77.43,87.02,93.58,97.18,98.88,99.57,99.89,99.94,99.99,0.0,117952.18,8760.0,1470853.06,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.93,12.11,1061.0 +86,simulated,6B,2004.0,OfficeLarge,Great Falls,NorthernGrid_East,46000,DOE,1.04,1802019442.63,41.39,3626.0,100.0,2008323.23,2008323.23,43.36,205709.98,496971.72,0.0,448283.76,0.0,0.0,70.87,77.33,85.46,91.37,94.47,96.54,98.79,99.47,99.85,0.0,355415.28,8760.0,0.01,1879487631.22,100.0,60.42,5293.0,3089939.87,3089939.87,66.71,214553.38,355089.29,13230.95,189726.41,0.0,3.18,76.79,88.57,93.78,96.24,97.83,98.95,99.54,99.89,99.97,0.0,277768.85,8760.0,3089939.87,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.54,14.1,1235.0 +87,simulated,1A,2004.0,Hospital,Miami,FRCC,22000,DOE,0.15,13121884482.24,100.0,8760.0,100.0,3388621.23,3388621.23,151.03,1497932.02,1497932.02,1508870.39,1508870.39,338898.01,338898.01,0.0,1.78,9.24,35.91,70.09,92.96,97.57,99.24,99.82,1190620.58,1753850.84,8760.0,1.0,1934950425.1,100.0,100.0,8760.0,421883.63,421883.63,18.8,220884.75,220884.75,223581.1,223581.1,27103.96,27103.96,0.07,0.92,3.48,15.91,40.65,73.48,93.07,98.79,99.91,185389.34,255390.92,8760.0,-33181.09,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.12,100.0,8760.0 +88,simulated,2A,2022.0,HotelLarge,Tampa,FRCC,11000,DOE,0.01,2294631748.4,98.33,8614.0,100.0,603422.81,603422.81,53.19,261944.26,266384.0,314975.54,317874.87,0.0,467.73,20.38,27.4,33.05,38.6,46.78,67.1,84.79,94.65,99.34,97124.76,383068.16,8760.0,0.28,18144805.68,100.0,32.81,2874.0,87664.37,87664.37,7.73,2071.32,6313.43,0.0,326.22,0.0,0.0,94.53,95.89,96.8,97.74,98.46,99.03,99.42,99.65,99.81,0.0,75.57,8760.0,87664.37,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.15,31.14,2728.0 +89,simulated,2B,2004.0,Hospital,Tucson,WestConnect_South,22000,DOE,0.23,8138627626.83,100.0,8760.0,100.0,2977285.74,2977285.74,132.7,929067.08,929067.08,903071.57,903071.57,142195.4,142195.4,6.16,19.9,48.36,74.26,92.68,98.92,99.43,99.76,99.94,726376.06,1201023.31,8760.0,0.99,1882291041.31,100.0,100.0,8760.0,467834.51,467834.51,20.85,214873.41,214873.41,208881.9,208881.9,25476.84,25476.84,0.09,2.09,17.66,37.85,63.85,80.32,91.22,97.98,99.69,159335.01,262559.82,8760.0,264578.49,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.16,100.0,8760.0 +90,simulated,2A,2004.0,OutPatientHealthCare,Tampa,FRCC,4000,DOE,0.14,1925461441.49,99.99,8759.0,100.0,550026.62,550026.62,144.59,219801.53,219826.63,183764.85,183779.66,0.0,99.58,3.23,20.76,40.75,63.82,72.4,76.67,83.4,91.4,97.51,122190.07,311536.02,8760.0,0.98,267344610.07,100.0,100.0,8760.0,181587.4,181587.4,47.74,30518.79,30518.79,25043.8,25043.8,3493.54,3493.54,27.33,72.29,90.01,95.74,98.47,99.53,99.82,99.95,99.98,17505.51,38137.27,8760.0,181454.62,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.33,99.99,8759.0 +91,simulated,3B,2022.0,HotelLarge,El Paso,WestConnect_South,11000,DOE,0.06,1138637800.29,94.1,8243.0,100.0,447052.03,447052.03,39.4,129981.48,138133.91,105734.78,123103.37,0.0,209.48,39.14,47.51,54.62,62.75,73.32,84.51,92.19,97.67,99.54,18752.46,230644.45,8760.0,0.18,66323875.88,100.0,37.71,3303.0,121074.43,121074.43,10.67,7571.22,20079.89,0.0,4825.27,0.0,0.0,84.26,88.16,91.08,93.58,95.68,97.39,98.73,99.45,99.85,0.0,516.94,8760.0,121074.43,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.27,31.85,2790.0 +92,simulated,4A,2004.0,Hospital,New York,NYISO,22000,DOE,0.38,7017860597.17,99.94,8755.0,100.0,3513532.28,3513532.28,156.6,801125.64,801583.16,719705.47,720321.25,0.0,980.45,19.66,48.87,73.5,88.3,96.86,98.8,99.29,99.62,99.83,409098.43,1070774.04,8760.0,0.91,2662264426.25,100.0,100.0,8760.0,718766.28,718766.28,32.04,303911.46,303911.46,288953.36,288953.36,14409.27,14409.27,0.51,1.47,15.53,49.41,74.17,90.08,97.44,99.49,99.78,238988.88,362736.47,8760.0,699960.1,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.2,99.94,8755.0 +93,simulated,8,2022.0,OfficeLarge,Fairbanks,TBD,46000,DOE,2.2,436089153.73,38.29,3354.0,100.0,1358448.35,1358448.35,29.33,49781.87,130020.62,0.0,4462.37,0.0,0.01,89.89,93.32,95.63,97.16,98.0,98.53,99.02,99.53,99.83,0.0,177.66,8760.0,0.0,958576591.83,100.0,53.53,4689.0,1972540.65,1972540.65,42.58,109426.55,204430.92,260.76,59178.36,0.0,0.0,83.89,92.25,94.73,95.86,96.51,98.05,99.22,99.74,99.93,0.0,76973.48,8760.0,1972540.65,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,1.45,20.58,1803.0 +94,simulated,2A,2004.0,Hospital,Tampa,FRCC,22000,DOE,0.18,11907046956.82,100.0,8760.0,100.0,4236177.91,4236177.91,188.81,1359251.94,1359251.94,1390140.23,1390140.23,133155.0,133155.0,2.02,17.84,43.95,74.68,95.06,97.98,99.3,99.83,99.91,1022848.56,1699349.29,8760.0,1.0,2100034283.65,100.0,100.0,8760.0,555584.64,555584.64,24.76,239729.94,239729.94,236805.72,236805.72,1842.72,1842.72,0.57,2.84,12.69,39.89,75.53,90.11,96.86,99.59,99.93,194617.23,276812.58,8760.0,336152.22,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.13,100.0,8760.0 +95,simulated,3A,2004.0,OfficeLarge,Sacramento,CAISO,46000,DOE,0.12,3618900590.18,97.8,8567.0,100.0,2499491.67,2499491.67,53.96,413116.51,422423.32,155862.8,169649.57,0.0,0.87,57.95,70.3,78.68,84.17,88.84,92.29,95.67,99.1,99.74,11007.15,627203.41,8760.0,0.18,432687647.92,100.0,44.28,3879.0,1414897.75,1414897.75,30.55,49393.57,111546.18,0.0,29770.73,0.0,1.55,88.66,93.94,96.93,98.36,99.29,99.73,99.95,99.98,99.99,0.0,19793.82,8760.0,1410674.08,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.57,42.2,3697.0 +96,simulated,3C,2004.0,HotelLarge,San Jose,CAISO,11000,DOE,0.48,1333061788.11,83.63,7326.0,100.0,871118.75,871118.75,76.78,152176.0,181963.12,100657.76,133089.44,0.0,775.98,46.76,66.79,78.61,86.37,91.71,95.46,98.03,99.42,99.91,15147.13,228402.95,8760.0,0.4,638062259.62,100.0,100.0,8760.0,365309.47,365309.47,32.2,72838.16,72838.16,49357.2,49357.2,0.08,0.08,32.32,69.46,80.97,86.64,90.91,93.92,96.0,97.91,99.73,30158.16,85846.73,8760.0,365309.47,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.42,83.63,7326.0 +97,simulated,3B,2022.0,OutPatientHealthCare,Los Angeles,CAISO,4000,DOE,0.12,792564047.93,99.94,8755.0,100.0,300232.38,300232.38,78.93,90475.35,90527.02,66363.7,66395.41,0.0,354.81,23.81,45.46,62.57,71.7,79.83,86.03,90.55,94.44,97.98,30873.71,131763.3,8760.0,0.99,95794044.63,100.0,100.0,8760.0,143732.8,143732.8,37.78,10935.39,10935.39,8199.65,8199.65,699.15,699.15,78.98,96.22,99.33,99.92,99.95,99.97,99.97,99.98,99.98,5924.39,13138.27,8760.0,143732.8,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.48,99.94,8755.0 +98,simulated,5A,2022.0,HotelLarge,Buffalo,NYISO,11000,DOE,0.35,574627012.17,79.57,6970.0,100.0,508570.15,508570.15,44.83,65596.69,82442.9,6500.21,21102.83,0.0,65.94,68.7,76.56,81.58,86.56,90.89,94.44,97.4,99.08,99.84,867.5,87380.3,8760.0,0.07,203367475.39,100.0,73.95,6478.0,171506.28,171506.28,15.12,23215.47,31393.56,5555.44,26888.75,0.0,0.0,56.76,69.05,80.42,90.29,96.27,99.08,99.76,99.93,99.97,0.0,42734.76,8760.0,171228.48,31.24,9.05,9.4,-18.19,-5.64,-0.35,1.35,2.8,6.05,9.4,12.84,16.06,17.55,19.01,22.45,0.34,53.54,4690.0 +99,simulated,4C,2022.0,Hospital,Seattle,NorthernGrid_West,22000,DOE,0.58,2351020630.8,100.0,8760.0,100.0,1435244.27,1435244.27,63.97,268381.35,268381.35,203167.85,203167.85,17791.3,17791.3,34.57,67.98,84.98,91.36,94.08,95.51,96.51,97.33,98.88,90022.29,324236.36,8760.0,0.77,1355576001.73,100.0,100.0,8760.0,330244.85,330244.85,14.72,154746.12,154746.12,148157.41,148157.41,8677.69,8677.69,0.79,4.34,15.19,37.79,59.98,76.32,90.15,97.63,99.75,115865.62,195565.81,8760.0,304101.38,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.23,100.0,8760.0 +100,simulated,3A,2022.0,OutPatientHealthCare,Sacramento,CAISO,4000,DOE,0.17,653269269.7,99.98,8758.0,100.0,367271.06,367271.06,96.55,74574.12,74591.15,51147.19,51173.36,0.0,183.31,42.21,64.47,78.49,84.65,89.59,93.69,96.67,98.7,99.69,22390.94,96636.4,8760.0,0.91,112406269.26,100.0,100.0,8760.0,106423.8,106423.8,27.98,12831.77,12831.77,8902.28,8902.28,3470.03,3470.03,59.62,85.3,93.76,97.23,98.55,99.29,99.62,99.82,99.94,6024.91,15258.47,8760.0,103280.3,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.29,99.98,8758.0 +101,simulated,4B,2022.0,OfficeLarge,Albuquerque,WestConnect_South,46000,DOE,0.09,1968563709.73,57.64,5049.0,100.0,1885122.68,1885122.68,40.7,224721.88,389891.8,7068.41,202371.67,0.0,0.01,70.33,79.87,84.24,87.17,89.44,93.42,97.42,99.49,99.91,0.0,271702.74,8760.0,0.04,178350168.59,100.0,22.33,1956.0,619985.03,619985.03,13.38,20359.61,91181.07,0.0,47523.29,0.0,0.01,89.65,92.85,96.02,97.98,98.96,99.46,99.82,99.93,99.99,0.0,0.0,8760.0,619985.03,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.33,9.33,817.0 +102,simulated,5C,2004.0,Hospital,Port Angeles,NorthernGrid_West,22000,DOE,0.75,3531005132.98,100.0,8760.0,100.0,1368787.55,1368787.55,61.01,403082.78,403082.78,351081.73,351081.73,71339.26,71339.26,1.12,25.27,61.82,81.4,89.14,96.47,98.21,99.36,99.86,273660.04,472069.98,8760.0,0.93,2653159630.36,100.0,100.0,8760.0,483371.21,483371.21,21.54,302872.1,302872.1,302347.65,302347.65,141352.93,141352.93,0.0,0.0,0.03,3.68,19.21,43.11,69.34,89.04,98.32,253448.86,350549.45,8760.0,374861.58,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.35,100.0,8760.0 +103,simulated,3B,2022.0,OfficeLarge,Los Angeles,CAISO,46000,DOE,0.02,2030311038.35,68.58,6008.0,100.0,1864254.85,1864254.85,40.25,231770.67,337934.59,33138.26,185841.12,0.0,0.04,65.78,78.32,85.1,88.74,90.98,95.03,97.53,99.51,99.92,0.0,312686.22,8760.0,0.15,33396780.91,100.0,25.34,2220.0,577887.15,577887.15,12.48,3812.42,15043.6,0.0,0.17,0.0,0.0,97.68,98.93,99.65,99.89,99.98,99.98,99.98,99.99,99.99,0.0,0.01,8760.0,577887.15,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.31,23.53,2061.0 +104,simulated,3C,2004.0,OutPatientHealthCare,San Jose,CAISO,4000,DOE,0.38,919456942.22,100.0,8760.0,100.0,373437.17,373437.17,98.17,104960.84,104960.84,97041.08,97041.08,7286.17,7286.17,20.48,32.76,61.77,79.19,87.95,93.4,96.95,98.98,99.86,45045.08,138189.32,8760.0,0.88,350261374.76,100.0,100.0,8760.0,163012.38,163012.38,42.85,39984.18,39984.18,34017.35,34017.35,8807.14,8807.14,7.98,46.77,72.87,86.96,94.13,97.57,99.12,99.73,99.92,24019.08,50654.46,8760.0,139048.43,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.44,100.0,8760.0 +105,simulated,6A,2022.0,Hospital,Rochester,NYISO,22000,DOE,0.75,2495776792.35,98.09,8593.0,100.0,1583705.43,1583705.43,70.59,284906.03,290443.01,105064.53,109809.25,0.0,435.37,55.83,67.88,77.52,83.61,88.81,92.53,94.74,96.83,99.38,34892.75,423208.16,8760.0,0.42,1862117790.26,100.0,100.0,8760.0,1211939.78,1211939.78,54.02,212570.52,212570.52,169747.76,169747.76,61425.23,61425.23,21.8,68.45,90.64,96.79,97.97,98.53,99.26,99.77,99.94,125733.26,269552.83,8760.0,1211939.78,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.77,98.09,8593.0 +106,simulated,3A,2022.0,OfficeLarge,Atlanta,SERTP,46000,DOE,0.04,2422163982.37,57.9,5072.0,100.0,1735366.99,1735366.99,37.46,276502.74,477555.99,12318.1,307663.6,0.0,0.01,65.13,72.82,78.46,82.42,86.02,89.03,91.18,97.48,99.94,0.0,401118.92,8760.0,0.02,100455368.69,100.0,22.07,1933.0,929554.67,929554.67,20.07,11467.51,51968.63,0.0,11546.48,0.0,0.02,95.97,98.29,99.13,99.66,99.83,99.91,99.94,99.97,99.99,0.0,0.0,8760.0,929554.67,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.54,7.33,642.0 +107,simulated,8,2022.0,Hospital,Fairbanks,TBD,22000,DOE,2.2,1132234450.71,92.76,8126.0,100.0,1235576.61,1235576.61,55.07,129250.51,139334.78,49587.61,62486.39,0.0,148.18,69.39,83.66,90.02,93.73,95.23,96.64,98.2,99.12,99.7,561.53,159130.94,8760.0,0.22,2486299925.96,100.0,100.0,8760.0,1208505.36,1208505.36,53.86,283824.19,283824.19,225624.52,225624.52,17482.07,17482.07,19.05,52.61,72.49,87.65,92.02,95.7,96.85,98.82,99.65,134967.0,376942.42,8760.0,1208505.36,30.0,-1.44,-0.38,-38.3,-22.34,-17.16,-14.65,-11.91,-6.45,-0.38,5.64,10.18,11.91,13.62,17.34,0.98,92.76,8126.0 +108,simulated,5B,2022.0,OfficeLarge,Denver,WestConnect_North,46000,DOE,0.3,1510770934.84,49.0,4292.0,100.0,1727050.5,1727050.5,37.28,172462.44,351996.96,0.0,159184.22,0.0,0.01,76.13,82.88,87.26,89.54,91.13,93.55,96.92,99.08,99.9,0.0,150620.59,8760.0,0.02,446961921.32,100.0,33.03,2893.0,1394612.45,1394612.45,30.11,51023.05,154497.73,0.0,95327.92,0.0,0.0,86.44,93.7,97.1,98.56,99.36,99.67,99.9,99.94,99.99,0.0,7717.85,8760.0,1394612.45,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.81,11.7,1025.0 +109,simulated,3B,2004.0,Hospital,Los Angeles,CAISO,22000,DOE,0.32,7005460124.87,99.97,8757.0,100.0,2827304.97,2827304.97,126.02,799710.06,799984.03,760696.14,760950.15,0.0,0.73,0.63,32.32,66.54,84.32,93.06,96.35,97.93,99.25,99.78,517590.09,929063.79,8760.0,1.0,2237658786.16,100.0,100.0,8760.0,691779.94,691779.94,30.83,255440.5,255440.5,260276.99,260276.99,21671.49,21671.49,0.31,3.97,24.69,58.47,93.39,99.87,99.94,99.95,99.97,208279.45,301796.36,8760.0,691779.94,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.24,99.97,8757.0 +110,simulated,7,2004.0,OutPatientHealthCare,International Falls,MISO_North,4000,DOE,1.29,528573125.7,73.8,6465.0,100.0,474213.25,474213.25,124.66,60339.4,81759.18,21390.09,39306.62,0.0,13.17,65.06,72.57,85.09,91.5,95.19,97.39,98.69,99.58,99.91,0.0,102336.59,8760.0,0.25,680247880.32,100.0,100.0,8760.0,381199.7,381199.7,100.21,77653.87,77653.87,54604.89,54604.89,8277.61,8277.61,33.92,64.39,79.55,88.06,92.37,95.15,96.97,98.18,98.96,30381.32,99675.49,8760.0,381199.7,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.8,73.8,6465.0 +111,simulated,6A,2022.0,HotelLarge,Rochester,NYISO,11000,DOE,0.52,615249043.81,79.9,6999.0,100.0,580723.99,580723.99,51.19,70233.91,87905.28,7550.02,21654.66,0.0,71.53,70.38,77.19,82.26,86.89,92.19,96.23,98.53,99.6,99.95,1039.2,93264.28,8760.0,0.05,320072078.4,100.0,69.76,6111.0,609443.39,609443.39,53.72,36537.91,52376.38,7767.95,33667.3,0.0,0.02,81.07,95.05,97.72,97.96,98.0,98.07,98.33,99.02,99.67,0.0,47671.89,8760.0,609443.39,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.05,49.68,4352.0 +112,simulated,3B,2022.0,OutPatientHealthCare,San Diego,CAISO,4000,DOE,0.14,636172642.57,100.0,8760.0,100.0,282838.01,282838.01,74.35,72622.45,72622.45,49099.92,49099.92,7362.41,7362.41,28.61,55.33,69.54,77.33,84.2,89.92,94.74,97.57,99.55,26127.55,103356.42,8760.0,0.99,90828422.53,100.0,100.0,8760.0,64276.45,64276.45,16.9,10368.54,10368.54,8080.78,8080.78,3433.58,3433.58,34.7,78.34,89.37,94.95,97.74,98.93,99.54,99.83,99.93,5668.82,11970.38,8760.0,42650.81,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.23,100.0,8760.0 +113,simulated,1A,2022.0,OutPatientHealthCare,Miami,FRCC,4000,DOE,0.05,1510902024.46,100.0,8760.0,100.0,416492.17,416492.17,109.49,172477.4,172477.4,130169.95,130169.95,11926.73,11926.73,2.47,16.6,47.04,62.27,67.88,74.58,81.23,87.87,95.66,95596.51,252211.33,8760.0,1.0,72706972.58,100.0,100.0,8760.0,58157.36,58157.36,15.29,8299.88,8299.88,6755.15,6755.15,3376.33,3376.33,39.2,84.84,93.04,97.76,98.79,99.62,99.89,99.93,99.99,4903.33,9747.32,8760.0,22940.3,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.14,100.0,8760.0 +114,simulated,3C,2022.0,OfficeLarge,San Francisco,CAISO,46000,DOE,0.09,607313892.44,44.85,3929.0,100.0,1418564.0,1418564.0,30.63,69328.07,154572.13,0.0,65850.37,0.0,0.02,83.73,91.19,95.42,97.69,98.66,99.02,99.44,99.9,99.98,0.0,43362.0,8760.0,0.06,57275330.0,100.0,28.04,2456.0,354078.66,354078.66,7.64,6538.28,23320.57,0.0,2605.29,0.0,0.0,93.93,96.74,98.23,99.26,99.65,99.81,99.89,99.94,99.99,0.0,0.04,8760.0,354078.66,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.25,15.81,1385.0 +115,simulated,3A,2022.0,Hospital,Atlanta,SERTP,22000,DOE,0.27,4626988451.83,100.0,8760.0,100.0,1520541.9,1520541.9,67.77,528195.03,528195.03,448197.67,448197.67,526.59,526.59,26.26,39.61,50.48,59.0,70.43,81.34,86.6,91.19,96.87,138301.93,810748.87,8760.0,0.81,1237409733.71,100.0,100.0,8760.0,446506.28,446506.28,19.9,141256.82,141256.82,130378.99,130378.99,57928.06,57928.06,0.0,11.06,53.09,80.16,91.95,96.93,99.28,99.89,99.99,104957.1,166521.94,8760.0,445624.2,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.29,100.0,8760.0 +116,simulated,3B,2004.0,OutPatientHealthCare,San Diego,CAISO,4000,DOE,0.29,1072405204.69,100.0,8760.0,100.0,374558.2,374558.2,98.46,122420.69,122420.69,110464.38,110464.38,11063.89,11063.89,14.19,23.68,51.42,71.46,82.76,89.49,94.85,97.84,99.6,77045.57,159339.25,8760.0,0.94,313652179.63,100.0,100.0,8760.0,135713.08,135713.08,35.68,35805.04,35805.04,30739.56,30739.56,9328.84,9328.84,3.93,38.34,70.56,85.43,92.91,96.84,98.56,99.59,99.9,23057.39,44003.78,8760.0,100454.42,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.36,100.0,8760.0 +117,simulated,3A,2004.0,OfficeLarge,Atlanta,SERTP,46000,DOE,0.12,5330037943.63,95.01,8323.0,100.0,2632331.64,2632331.64,56.83,608451.82,640398.65,335228.65,398286.88,0.0,3.36,47.12,57.29,66.64,74.14,81.22,86.06,94.3,97.27,99.12,13474.77,1089870.55,8760.0,0.08,665540750.59,100.0,38.15,3342.0,2195981.42,2195981.42,47.41,75974.97,199144.45,0.0,47756.53,0.0,0.93,88.4,93.04,96.79,98.62,99.33,99.75,99.87,99.92,99.97,0.0,17462.18,8760.0,2195109.82,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.83,33.26,2914.0 +118,simulated,6B,2022.0,OfficeLarge,Great Falls,NorthernGrid_East,46000,DOE,0.76,1054981763.88,38.41,3365.0,100.0,1924529.65,1924529.65,41.55,120431.71,313516.13,0.0,107932.14,0.0,0.01,84.19,89.52,92.44,93.79,94.93,96.88,98.6,99.45,99.83,0.0,20224.8,8760.0,0.01,803825528.33,100.0,41.27,3615.0,1976526.13,1976526.13,42.67,91760.91,222358.38,0.0,133973.54,0.0,0.01,84.2,92.67,95.97,97.68,98.63,99.37,99.71,99.9,99.97,0.0,76103.73,8760.0,1976526.13,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.03,9.09,796.0 +119,simulated,2B,2004.0,HotelLarge,Tucson,WestConnect_South,11000,DOE,0.11,2917500981.22,89.77,7864.0,100.0,970651.0,970651.0,85.56,333048.06,370994.53,313045.61,362216.3,0.0,934.35,26.61,37.97,47.98,57.82,67.21,77.59,87.87,96.58,99.71,84620.12,558884.12,8760.0,0.4,314774293.38,100.0,98.79,8654.0,344939.71,344939.71,30.4,35933.14,36373.27,12623.2,12946.0,0.0,0.01,69.54,83.89,89.67,93.48,96.05,97.61,98.49,99.21,99.68,3352.76,45319.63,8760.0,344939.71,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.36,88.56,7758.0 +120,simulated,4C,2004.0,OfficeLarge,Seattle,NorthernGrid_West,46000,DOE,0.65,1246478706.27,49.49,4335.0,100.0,1925078.56,1925078.56,41.56,142292.09,287538.34,0.0,121424.21,0.0,0.0,79.18,86.22,91.13,94.02,96.06,97.31,98.87,99.63,99.82,0.0,116182.22,8760.0,0.04,814380696.37,100.0,51.47,4509.0,1577448.85,1577448.85,34.06,92965.83,180612.26,384.04,105492.01,0.0,4.08,78.48,88.58,95.1,98.06,99.28,99.71,99.89,99.91,99.97,0.0,115575.21,8760.0,1577448.85,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.82,17.51,1534.0 +121,simulated,5A,2004.0,Hospital,Chicago,PJM_West,22000,DOE,0.46,5929963979.06,95.56,8371.0,100.0,3958415.23,3958415.23,176.43,676936.53,708393.74,434576.77,498650.29,0.0,49.35,47.01,57.6,80.51,93.22,98.24,99.02,99.42,99.61,99.86,233455.74,1034799.53,8760.0,0.73,2748553368.23,100.0,100.0,8760.0,1130002.8,1130002.8,50.37,313761.8,313761.8,286336.2,286336.2,949.47,949.47,1.05,20.92,69.18,88.92,95.54,97.87,98.85,99.52,99.76,235571.35,361489.38,8760.0,1130002.8,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.29,95.56,8371.0 +122,simulated,4A,2022.0,HotelLarge,New York,NYISO,11000,DOE,0.17,931297801.33,82.49,7226.0,100.0,539976.99,539976.99,47.59,106312.53,128881.51,16022.33,49965.0,0.0,65.53,59.26,65.31,70.46,75.57,80.62,87.71,94.39,97.96,99.53,1722.27,209624.7,8760.0,0.07,161873462.67,100.0,66.11,5791.0,134329.23,134329.23,11.84,18478.71,27952.59,1021.87,21897.22,0.0,0.01,61.84,70.32,80.09,86.54,91.94,96.3,99.03,99.82,99.97,0.0,32972.84,8760.0,134241.86,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.25,48.6,4257.0 +123,simulated,2A,2004.0,Hospital,Houston,ERCOT,22000,DOE,0.2,10922427413.04,100.0,8760.0,100.0,3714278.69,3714278.69,165.55,1246852.44,1246852.44,1194317.59,1194317.59,77629.98,77629.98,3.94,19.6,41.16,66.64,87.83,96.95,98.81,99.53,99.79,863409.45,1601305.94,8760.0,0.99,2233372018.16,100.0,100.0,8760.0,595464.71,595464.71,26.54,254951.14,254951.14,246645.39,246645.39,11008.8,11008.8,0.78,3.54,16.36,44.73,73.49,88.09,95.78,98.9,99.86,200962.38,302088.3,8760.0,454389.76,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.16,100.0,8760.0 +124,simulated,2A,2004.0,HotelLarge,Tampa,FRCC,11000,DOE,0.07,4175366144.64,93.06,8152.0,100.0,968346.21,968346.21,85.35,476639.97,512189.17,573990.77,594959.41,0.0,1222.08,16.6,22.74,27.73,33.25,38.74,51.23,71.89,91.15,99.32,234248.5,690885.99,8760.0,0.7,280859873.56,100.0,93.7,8208.0,173723.99,173723.99,15.31,32061.63,34217.82,21899.33,23458.94,0.0,0.83,39.65,66.71,79.21,87.66,92.64,96.19,98.38,99.59,99.9,11553.76,45320.71,8760.0,173723.99,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.18,86.76,7600.0 +125,simulated,3C,2022.0,HotelLarge,San Francisco,CAISO,11000,DOE,0.19,362023236.84,93.97,8232.0,100.0,333187.31,333187.31,29.37,41326.85,43977.56,21380.44,23737.68,0.0,96.84,61.92,78.15,88.18,93.62,96.67,98.4,99.28,99.68,99.92,8340.51,58462.67,8760.0,0.35,69039472.58,100.0,88.39,7743.0,107840.41,107840.41,9.51,7881.22,8916.37,2146.22,2811.04,0.0,0.02,82.89,89.03,92.57,95.23,96.83,98.08,98.78,99.34,99.7,303.52,6347.75,8760.0,107840.41,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.32,82.36,7215.0 +126,simulated,3B,2004.0,OfficeLarge,San Diego,CAISO,46000,DOE,0.07,3271638538.92,84.95,7442.0,100.0,2201900.14,2201900.14,47.54,373474.72,439618.19,181858.51,292790.38,0.0,0.01,52.92,67.09,77.41,84.34,89.26,94.67,97.76,99.26,99.93,4800.12,590946.07,8760.0,0.36,240536493.46,100.0,37.2,3259.0,624966.24,624966.24,13.49,27458.5,73806.84,0.0,32685.21,0.0,1.7,86.18,92.17,95.4,97.51,98.68,99.36,99.82,99.92,99.97,0.0,13670.95,8760.0,624965.11,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.28,31.7,2777.0 +127,simulated,6B,2004.0,Hospital,Great Falls,NorthernGrid_East,22000,DOE,0.73,3655199204.06,92.68,8119.0,100.0,2031636.47,2031636.47,90.55,417260.18,450203.13,287012.7,308517.33,0.0,0.01,32.37,65.0,67.8,85.35,93.92,98.41,99.74,99.98,99.99,165855.06,740080.09,8760.0,0.65,2650672465.49,100.0,100.0,8760.0,1117346.84,1117346.84,49.8,302588.18,302588.18,267382.13,267382.13,60653.99,60653.99,1.03,30.38,71.94,89.54,94.16,95.67,97.34,98.87,99.65,210728.37,346660.14,8760.0,1117346.84,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,0.55,92.68,8119.0 +128,simulated,6A,2004.0,OutPatientHealthCare,Rochester,NYISO,4000,DOE,0.93,646908206.68,82.43,7221.0,100.0,503248.19,503248.19,132.29,73847.97,89587.07,28307.55,46547.61,0.0,17.56,59.3,68.22,83.36,89.99,93.7,96.13,98.23,99.39,99.79,5715.97,120527.93,8760.0,0.31,603862369.55,100.0,100.0,8760.0,374569.08,374569.08,98.47,68934.06,68934.06,50424.97,50424.97,7819.64,7819.64,36.89,68.09,83.61,90.7,94.51,96.84,98.09,98.95,99.39,27513.43,88662.93,8760.0,374569.08,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.74,82.43,7221.0 +129,simulated,6B,2004.0,OutPatientHealthCare,Great Falls,NorthernGrid_East,4000,DOE,1.0,515894305.52,89.76,7863.0,100.0,344155.58,344155.58,90.47,58892.04,65610.37,28231.53,32607.09,0.0,15.81,56.91,66.32,78.14,87.42,92.26,95.45,97.81,98.89,99.74,13911.27,94101.95,8760.0,0.41,517101969.58,100.0,100.0,8760.0,355486.73,355486.73,93.45,59029.91,59029.91,46071.57,46071.57,6650.47,6650.47,36.54,73.01,88.6,94.21,96.55,97.95,98.68,99.26,99.61,27296.9,73858.38,8760.0,355486.73,36.74,7.07,7.38,-33.9,-8.09,-1.1,0.39,1.99,4.61,7.38,10.6,13.65,15.25,17.27,21.93,1.03,89.76,7863.0 +130,simulated,4A,2022.0,OfficeLarge,New York,NYISO,46000,DOE,0.1,1833528040.46,47.9,4196.0,100.0,1869087.96,1869087.96,40.35,209306.85,436970.46,0.0,228517.04,0.0,0.01,74.52,80.87,84.84,87.9,90.56,92.41,94.47,98.82,99.84,0.0,198806.26,8760.0,0.01,189415904.29,100.0,32.49,2846.0,1326991.49,1326991.49,28.65,21622.82,66555.13,0.0,18437.67,0.0,0.01,94.59,98.26,99.36,99.66,99.83,99.92,99.97,99.97,99.98,0.0,2607.67,8760.0,1326991.49,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.71,8.93,782.0 +131,simulated,6A,2004.0,HotelLarge,Rochester,NYISO,11000,DOE,0.86,1163855675.05,63.46,5559.0,100.0,861486.85,861486.85,75.93,132860.24,209364.22,9507.48,117625.47,0.0,347.97,65.97,71.55,75.88,80.58,86.11,91.94,97.05,99.35,99.83,0.0,237386.36,8760.0,0.14,1004389591.43,100.0,99.95,8756.0,944095.47,944095.47,83.21,114656.35,114708.72,68889.89,68954.48,0.0,8.08,61.28,84.37,92.1,96.02,97.73,97.91,97.98,98.05,98.58,35981.02,143139.89,8760.0,944095.47,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.1,63.41,5555.0 +132,simulated,3C,2022.0,OutPatientHealthCare,San Jose,CAISO,4000,DOE,0.19,534641785.89,100.0,8760.0,100.0,281513.87,281513.87,74.0,61032.17,61032.17,39539.96,39539.96,4371.78,4371.78,36.54,63.24,77.24,83.94,88.32,93.12,96.55,98.78,99.79,23123.35,79032.02,8760.0,0.96,102911272.39,100.0,100.0,8760.0,91255.77,91255.77,23.99,11747.86,11747.86,8602.92,8602.92,3644.12,3644.12,53.69,84.26,93.5,97.27,98.74,99.43,99.73,99.87,99.95,5969.66,14072.62,8760.0,78259.32,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.32,100.0,8760.0 +133,simulated,3B,2022.0,Hospital,El Paso,WestConnect_South,22000,DOE,0.23,4142630983.72,100.0,8760.0,100.0,1604280.15,1604280.15,71.5,472903.08,472903.08,425106.18,425106.18,24222.76,24222.76,24.85,41.22,54.1,69.67,81.23,88.11,94.59,99.75,99.93,161322.96,696553.89,8760.0,0.87,956917384.19,100.0,100.0,8760.0,289923.48,289923.48,12.92,109237.14,109237.14,103302.02,103302.02,30602.62,30602.62,0.0,6.4,31.64,62.88,83.12,92.72,97.56,99.35,99.92,80844.04,129834.51,8760.0,254532.93,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.18,100.0,8760.0 +134,simulated,4B,2022.0,HotelLarge,Albuquerque,WestConnect_South,11000,DOE,0.19,749730550.56,90.51,7929.0,100.0,371378.0,371378.0,32.73,85585.68,94555.5,33983.79,47556.78,0.0,62.06,51.61,60.15,66.29,72.79,79.99,87.9,93.58,96.75,99.25,7031.69,159558.45,8760.0,0.13,141239085.27,100.0,49.12,4303.0,127746.0,127746.0,11.26,16123.18,32823.4,0.0,23004.63,0.0,0.0,71.22,76.5,81.11,85.45,89.34,92.98,96.26,98.68,99.82,0.0,21664.43,8760.0,127746.0,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.34,39.69,3477.0 +135,simulated,3C,2004.0,HotelLarge,San Francisco,CAISO,11000,DOE,0.74,844422148.97,82.63,7238.0,100.0,723828.89,723828.89,63.8,96395.22,116665.12,59102.79,83130.13,0.0,355.68,54.95,75.39,86.44,92.84,96.26,98.28,99.35,99.76,99.97,9612.52,142808.05,8760.0,0.43,623314598.63,100.0,100.0,8760.0,309230.96,309230.96,27.26,71154.63,71154.63,57688.57,57688.57,956.98,956.98,17.0,55.51,77.18,86.58,91.93,95.27,97.52,98.87,99.69,39008.16,87460.34,8760.0,309230.96,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.43,82.63,7238.0 +136,simulated,1A,2022.0,Hospital,Miami,FRCC,22000,DOE,0.11,8578318421.81,100.0,8760.0,100.0,1761045.76,1761045.76,78.49,979260.09,979260.09,905009.57,905009.57,201494.68,201494.68,0.0,0.34,4.83,18.79,45.83,67.72,76.14,85.79,96.16,755354.57,1216793.28,8760.0,1.0,970627281.59,100.0,100.0,8760.0,234968.54,234968.54,10.47,110802.2,110802.2,113087.03,113087.03,45162.06,45162.06,0.0,0.08,11.27,31.52,54.98,84.33,96.63,99.57,99.95,87385.44,132537.16,8760.0,-88858.1,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.13,100.0,8760.0 +137,simulated,3A,2004.0,HotelLarge,Atlanta,SERTP,11000,DOE,0.16,2435573424.17,82.19,7200.0,100.0,804499.78,804499.78,70.91,278033.5,338274.09,238687.88,352418.76,0.0,1034.87,36.95,44.2,50.19,56.38,63.14,70.5,79.75,91.0,99.1,11183.11,524084.45,8760.0,0.47,401043231.34,100.0,96.84,8483.0,262577.49,262577.49,23.14,45781.19,47276.11,37147.69,38353.16,0.0,0.81,35.92,65.75,82.84,92.39,97.2,99.05,99.79,99.91,99.98,19737.13,65199.52,8760.0,262577.49,36.7,16.65,17.66,-12.55,4.11,8.26,10.11,11.81,14.89,17.66,20.42,22.45,23.48,24.65,28.09,0.33,79.03,6923.0 +138,simulated,2B,2022.0,OfficeLarge,Tucson,WestConnect_South,46000,DOE,0.01,3420414097.93,72.47,6348.0,100.0,3111054.23,3111054.23,67.16,390458.23,538817.6,164232.64,339737.67,0.0,0.08,61.85,72.88,79.93,91.62,98.82,99.98,99.99,99.99,99.99,0.0,707197.08,8760.0,0.04,19322915.79,100.0,8.39,735.0,338504.89,338504.89,7.31,2205.81,26289.68,0.0,4285.77,0.0,0.01,98.14,98.94,99.32,99.6,99.75,99.84,99.87,99.93,99.97,0.0,0.0,8760.0,338504.89,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.11,3.47,304.0 +139,simulated,3A,2004.0,OutPatientHealthCare,Sacramento,CAISO,4000,DOE,0.32,1067380857.43,99.99,8759.0,100.0,462835.61,462835.61,121.67,121847.13,121861.04,97952.47,97955.62,0.0,97.03,7.07,45.15,72.67,83.46,88.9,93.3,96.75,98.71,99.69,69755.27,145867.6,8760.0,0.93,341234174.53,100.0,100.0,8760.0,172083.16,172083.16,45.24,38953.67,38953.67,33311.83,33311.83,7538.73,7538.73,15.39,51.96,75.88,88.48,95.27,98.13,99.35,99.78,99.94,21236.14,50924.18,8760.0,168338.83,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.37,99.99,8759.0 +140,simulated,5C,2004.0,OutPatientHealthCare,Port Angeles,NorthernGrid_West,4000,DOE,0.87,474460145.15,99.81,8743.0,100.0,290396.27,290396.27,76.34,54162.12,54267.43,30307.44,30344.73,0.0,19.41,46.89,71.11,77.65,86.23,91.84,95.23,97.8,99.38,99.91,20974.7,77532.51,8760.0,0.66,415044319.3,100.0,100.0,8760.0,192427.41,192427.41,50.59,47379.49,47379.49,42478.14,42478.14,9053.99,9053.99,6.93,43.14,71.97,88.31,95.78,98.45,99.43,99.89,99.99,29433.73,60383.22,8760.0,192427.41,29.58,9.26,9.0,-5.36,2.98,4.58,5.58,6.0,7.42,9.0,10.42,12.0,12.58,13.58,16.58,0.66,99.81,8743.0 +141,simulated,5A,2022.0,OfficeLarge,Chicago,PJM_West,46000,DOE,0.17,1762595014.54,45.81,4013.0,100.0,4232953.32,4232953.32,91.38,201209.48,439221.28,0.0,216092.81,0.0,0.01,83.14,89.43,94.86,99.73,99.94,99.98,99.98,99.98,99.99,0.0,149688.73,8760.0,0.01,291414865.8,100.0,33.33,2920.0,1751228.21,1751228.21,37.81,33266.54,99799.61,0.0,34074.95,0.0,0.01,93.55,97.92,99.25,99.59,99.75,99.9,99.93,99.97,99.98,0.0,4341.12,8760.0,1751228.21,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.41,7.11,623.0 +142,simulated,4B,2022.0,Hospital,Albuquerque,WestConnect_South,22000,DOE,0.32,3116644768.84,100.0,8760.0,100.0,1262239.06,1262239.06,56.26,355781.37,355781.37,266639.34,266639.34,8953.53,8953.53,32.71,48.39,61.69,72.64,80.78,86.48,90.32,93.57,98.79,72715.4,540626.68,8760.0,0.74,1010620423.71,100.0,100.0,8760.0,289738.45,289738.45,12.91,115367.63,115367.63,105303.84,105303.84,19997.68,19997.68,0.03,7.17,32.1,59.71,76.26,86.45,93.37,97.9,99.73,80119.94,142257.98,8760.0,272171.87,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.23,100.0,8760.0 +143,simulated,3B,2004.0,OutPatientHealthCare,Los Angeles,CAISO,4000,DOE,0.25,1279816006.3,99.94,8755.0,100.0,362448.96,362448.96,95.28,146097.72,146181.15,127667.3,127693.14,0.0,784.69,6.55,14.89,36.45,59.99,73.05,81.6,87.59,91.67,95.7,93408.8,189164.49,8760.0,0.95,317166444.75,100.0,100.0,8760.0,261577.3,261577.3,68.76,36206.22,36206.22,31576.69,31576.69,439.32,439.32,34.76,82.67,95.57,99.14,99.86,99.97,99.97,99.98,99.98,22587.16,45075.7,8760.0,261577.3,37.8,17.11,16.91,-18.88,11.35,13.01,13.65,14.29,15.81,16.91,17.89,19.11,19.89,21.05,23.76,0.72,99.94,8755.0 +144,simulated,3A,2022.0,OfficeLarge,Sacramento,CAISO,46000,DOE,0.04,1837891490.85,52.09,4563.0,100.0,2490189.04,2490189.04,53.76,209804.96,402781.39,604.11,220839.6,0.0,0.01,75.25,83.7,88.98,92.45,95.11,98.86,99.37,99.65,99.84,0.0,243938.05,8760.0,0.08,65472375.7,100.0,25.55,2238.0,1018351.64,1018351.64,21.98,7474.02,29254.86,0.0,6439.53,0.0,0.01,97.67,99.49,99.83,99.93,99.95,99.97,99.97,99.98,99.98,0.0,1.46,8760.0,1018351.64,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.41,11.36,995.0 +145,simulated,4A,2004.0,OutPatientHealthCare,New York,NYISO,4000,DOE,0.42,1017427771.55,97.6,8550.0,100.0,521492.84,521492.84,137.09,116144.72,118997.4,83988.94,86589.34,0.0,17.07,32.24,57.96,74.76,84.9,89.6,92.9,95.92,98.34,99.46,43673.46,157351.14,8760.0,0.71,428352165.72,100.0,100.0,8760.0,283611.69,283611.69,74.56,48898.65,48898.65,40813.73,40813.73,8243.49,8243.49,32.33,67.95,87.57,95.27,98.03,99.14,99.65,99.9,99.97,23981.76,64472.61,8760.0,283611.69,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.54,97.6,8550.0 +146,simulated,5B,2004.0,Hospital,Denver,WestConnect_North,22000,DOE,0.5,4331767536.49,97.82,8569.0,100.0,2277542.24,2277542.24,101.51,494494.01,505516.11,323175.56,332290.18,0.0,0.02,33.57,56.5,59.52,84.84,94.59,99.27,99.86,99.94,99.98,181422.51,782640.09,8760.0,0.76,2145382331.75,100.0,100.0,8760.0,816059.59,816059.59,36.37,244906.66,244906.66,225992.37,225992.37,29841.3,29841.3,0.75,20.27,58.26,81.94,93.94,97.98,98.9,99.3,99.77,174663.13,299234.68,8760.0,816059.59,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.36,97.82,8569.0 +147,simulated,6A,2022.0,OutPatientHealthCare,Rochester,NYISO,4000,DOE,0.64,432594830.63,83.45,7310.0,100.0,384868.98,384868.98,101.17,49382.97,59178.5,20329.73,28776.25,0.0,13.09,62.81,78.24,87.07,90.67,93.9,96.08,98.07,99.36,99.82,3941.34,68488.33,8760.0,0.27,278792864.97,100.0,100.0,8760.0,258282.85,258282.85,67.9,31825.67,31825.67,15169.28,15169.28,3255.84,3255.84,64.61,80.64,89.11,93.64,96.19,97.75,98.7,99.11,99.55,7355.15,40174.95,8760.0,258282.85,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.67,83.45,7310.0 +148,simulated,3C,2022.0,OfficeLarge,San Jose,CAISO,46000,DOE,0.05,1130220861.92,51.85,4542.0,100.0,1446250.21,1446250.21,31.22,129020.65,248837.71,283.04,110263.46,0.0,0.03,76.61,84.33,89.19,92.26,94.27,95.48,97.85,99.17,99.85,0.0,122036.29,8760.0,0.03,60032601.03,100.0,16.99,1488.0,409109.79,409109.79,8.83,6853.04,40344.49,0.0,9733.34,0.0,0.01,94.78,96.89,98.33,99.09,99.5,99.69,99.78,99.89,99.95,0.0,0.0,8760.0,409109.79,34.9,14.88,14.65,0.35,8.3,10.6,11.58,12.41,13.55,14.65,15.75,16.91,17.83,19.0,22.17,0.28,6.56,575.0 +149,simulated,5B,2004.0,OfficeLarge,Denver,WestConnect_North,46000,DOE,0.42,2670857139.68,51.12,4478.0,100.0,2014872.54,2014872.54,43.5,304892.37,596439.74,0.11,546341.6,0.0,0.01,60.49,67.32,77.33,85.27,89.98,93.03,97.85,99.29,99.91,0.0,557230.18,8760.0,0.02,1115559137.83,100.0,50.9,4459.0,2244176.58,2244176.58,48.45,127346.93,250181.46,124.37,114357.21,0.0,2.62,80.91,89.57,94.57,97.35,98.56,99.38,99.71,99.93,99.98,0.0,120455.43,8760.0,2244176.58,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,1.11,15.26,1337.0 +150,simulated,4B,2022.0,OutPatientHealthCare,Albuquerque,WestConnect_South,4000,DOE,0.18,569449553.48,99.74,8737.0,100.0,276410.19,276410.19,72.66,65005.66,65176.78,45608.95,45836.29,0.0,17.97,40.18,57.08,74.37,81.15,85.35,88.63,92.27,95.57,98.72,15502.98,84891.59,8760.0,0.8,101778222.51,100.0,100.0,8760.0,116690.94,116690.94,30.68,11618.52,11618.52,7674.62,7674.62,2552.05,2552.05,69.6,89.82,95.55,97.58,98.76,99.42,99.76,99.87,99.95,5051.66,13496.23,8760.0,116690.94,38.65,13.68,13.73,-8.47,0.46,3.76,5.35,7.16,10.46,13.73,17.02,19.89,21.27,22.84,26.99,0.42,99.74,8737.0 +151,simulated,2A,2022.0,OfficeLarge,Tampa,FRCC,46000,DOE,0.0,4375897608.64,77.32,6773.0,100.0,2373320.75,2373320.75,51.24,499531.69,646079.67,310604.34,511250.51,0.0,0.01,47.05,59.39,68.5,75.18,81.7,89.02,98.82,99.79,99.95,6678.08,945030.74,8760.0,0.08,16149298.8,100.0,8.17,716.0,348364.85,348364.85,7.52,1843.53,22554.89,0.0,4093.06,0.0,0.01,98.65,99.21,99.46,99.69,99.81,99.91,99.95,99.97,99.99,0.0,0.0,8760.0,348364.85,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.15,4.53,397.0 +152,simulated,3B,2004.0,HotelLarge,El Paso,WestConnect_South,11000,DOE,0.21,2180328719.06,87.59,7673.0,100.0,886074.96,886074.96,78.1,248895.97,284155.96,207628.8,274364.99,0.0,791.15,37.59,47.18,55.39,64.55,74.54,85.02,94.55,98.87,99.83,19611.71,446634.76,8760.0,0.26,467997087.22,100.0,99.3,8699.0,354236.72,354236.72,31.22,53424.33,53798.95,19504.88,19677.49,0.0,0.02,65.08,76.88,81.89,86.54,90.42,93.52,96.03,97.8,99.12,7851.44,61111.06,8760.0,354236.72,38.9,17.98,18.47,-4.64,5.46,9.08,10.71,12.16,15.35,18.47,21.35,23.76,25.11,26.66,30.25,0.4,86.89,7612.0 +153,simulated,5B,2004.0,OutPatientHealthCare,Denver,WestConnect_North,4000,DOE,0.58,658411974.68,95.68,8382.0,100.0,339523.36,339523.36,89.25,75161.18,78550.7,36622.84,41437.47,0.0,14.39,47.92,56.08,68.85,80.88,87.19,91.34,95.3,98.39,99.83,18043.72,117149.18,8760.0,0.53,382719592.87,100.0,100.0,8760.0,306823.26,306823.26,80.66,43689.45,43689.45,34795.28,34795.28,6708.3,6708.3,43.78,78.12,91.7,97.17,98.69,99.41,99.76,99.9,99.95,20301.44,56738.67,8760.0,306823.26,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.9,95.68,8382.0 +154,simulated,5A,2022.0,Hospital,Chicago,PJM_West,22000,DOE,0.49,3273044858.65,99.74,8737.0,100.0,1707438.52,1707438.52,76.1,373635.26,374618.85,221549.54,223011.1,0.0,465.29,44.95,61.71,70.11,77.66,86.24,91.06,94.61,98.28,99.83,68564.84,618857.79,8760.0,0.6,1592899076.71,100.0,100.0,8760.0,966324.23,966324.23,43.07,181837.79,181837.79,158486.27,158486.27,63665.69,63665.69,8.0,66.26,89.42,97.1,99.3,99.67,99.73,99.92,99.94,122766.07,219788.8,8760.0,966324.23,39.58,11.39,12.0,-27.05,-4.68,1.58,3.92,6.0,9.0,12.0,15.42,19.0,21.0,22.42,26.03,0.57,99.74,8737.0 +155,simulated,4A,2004.0,OfficeLarge,New York,NYISO,46000,DOE,0.29,4208928886.04,91.88,8049.0,100.0,3046976.03,3046976.03,65.78,480471.33,522913.27,252205.65,310987.03,0.0,0.79,53.62,71.61,81.92,86.86,89.65,95.33,98.16,99.27,99.81,31330.16,687481.17,8760.0,0.25,1201042625.54,100.0,49.0,4292.0,2602994.89,2602994.89,56.2,137105.32,279832.86,0.0,150111.28,0.0,1.05,80.5,90.24,95.64,98.24,99.36,99.79,99.93,99.99,99.99,0.0,142438.07,8760.0,2602994.89,36.45,12.55,12.58,-13.65,0.25,3.3,4.65,6.06,8.94,12.58,15.89,19.47,21.1,22.2,25.25,0.85,40.99,3591.0 +156,simulated,3C,2022.0,OutPatientHealthCare,San Francisco,CAISO,4000,DOE,0.22,478444618.16,100.0,8760.0,100.0,231573.21,231573.21,60.88,54616.97,54616.97,31747.19,31747.19,7559.47,7559.47,30.63,59.29,71.55,80.42,87.64,92.65,96.78,98.93,99.68,21742.44,77575.09,8760.0,0.98,105910310.03,100.0,100.0,8760.0,83470.74,83470.74,21.94,12090.22,12090.22,9214.65,9214.65,3717.24,3717.24,44.84,80.83,91.04,96.51,98.45,99.39,99.73,99.91,99.98,6264.49,14546.74,8760.0,65200.77,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.36,100.0,8760.0 +157,simulated,2A,2022.0,Hospital,Houston,ERCOT,22000,DOE,0.19,6335262979.67,100.0,8760.0,100.0,1774260.47,1774260.47,79.08,723203.54,723203.54,760436.46,760436.46,15041.27,15041.27,16.96,28.03,36.31,46.15,64.92,77.23,84.42,90.73,98.01,305360.44,1018419.51,8760.0,0.91,1195286169.59,100.0,100.0,8760.0,347360.08,347360.08,15.48,136448.19,136448.19,134407.98,134407.98,57356.9,57356.9,0.0,2.69,22.64,55.89,84.2,94.37,98.13,99.73,99.99,107132.81,158061.77,8760.0,316413.28,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.2,100.0,8760.0 +158,simulated,6A,2004.0,Hospital,Rochester,NYISO,22000,DOE,0.7,4474243435.35,89.84,7870.0,100.0,3228257.83,3228257.83,143.89,510758.38,568518.86,294219.6,351398.84,0.0,51.13,52.99,62.9,76.89,92.89,98.11,99.49,99.7,99.79,99.9,112368.89,953164.8,8760.0,0.54,3141536455.01,100.0,100.0,8760.0,1358598.85,1358598.85,60.55,358622.88,358622.88,302799.1,302799.1,33048.43,33048.43,0.46,37.83,73.12,88.64,93.39,96.0,98.03,99.28,99.78,242148.4,421472.87,8760.0,1358598.85,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,0.42,89.84,7870.0 +159,simulated,3B,2004.0,Hospital,San Diego,CAISO,22000,DOE,0.35,6539768673.17,100.0,8760.0,100.0,2480385.46,2480385.46,110.55,746548.94,746548.94,712504.91,712504.91,207815.72,207815.72,0.09,22.99,52.47,83.8,91.64,96.48,98.57,99.47,99.84,504749.14,860417.57,8760.0,1.0,2316776699.59,100.0,100.0,8760.0,432842.63,432842.63,19.29,264472.23,264472.23,269056.51,269056.51,68193.76,68193.76,0.0,0.15,1.34,6.47,25.71,45.51,69.67,91.46,99.2,214806.33,312284.74,8760.0,155755.0,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.17,100.0,8760.0 +160,simulated,4C,2022.0,HotelLarge,Seattle,NorthernGrid_West,11000,DOE,0.47,327816055.98,77.13,6757.0,100.0,383325.45,383325.45,33.79,37421.92,48515.03,8310.37,17979.09,0.0,110.41,73.23,82.8,88.73,92.47,95.68,97.71,99.01,99.45,99.85,551.07,43231.16,8760.0,0.08,154100480.76,100.0,77.47,6786.0,127963.72,127963.72,11.28,17591.38,22708.59,2318.97,9357.6,0.0,0.02,63.79,71.85,80.34,86.07,91.55,95.91,98.69,99.68,99.94,10.61,29804.66,8760.0,127794.46,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.33,54.61,4784.0 +161,simulated,3A,2022.0,HotelLarge,Sacramento,CAISO,11000,DOE,0.11,815430558.71,88.78,7777.0,100.0,516146.43,516146.43,45.49,93085.68,104851.56,37479.89,53381.76,0.0,95.76,55.18,66.46,73.26,81.23,88.89,94.17,97.47,99.27,99.85,6338.63,168319.17,8760.0,0.17,85811753.72,100.0,64.3,5633.0,106465.73,106465.73,9.38,9795.86,15233.76,425.38,3744.82,0.0,0.0,76.86,84.01,88.24,91.26,93.95,96.11,97.69,99.06,99.93,0.0,8249.72,8760.0,106011.77,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.21,53.09,4651.0 +162,simulated,3B,2022.0,OfficeLarge,San Diego,CAISO,46000,DOE,0.01,1496891125.89,58.06,5086.0,100.0,1825661.86,1825661.86,39.41,170877.98,294315.99,5965.22,169689.42,0.0,0.02,71.97,82.69,88.95,92.79,94.67,97.69,99.21,99.92,99.98,0.0,224908.2,8760.0,0.03,11507262.63,100.0,13.8,1209.0,228092.32,228092.32,4.92,1313.61,9518.0,0.0,203.12,0.0,0.0,98.32,99.08,99.47,99.71,99.89,99.94,99.95,99.98,99.99,0.0,0.0,8760.0,228092.32,36.42,16.01,16.0,1.83,10.42,12.0,13.0,13.42,14.83,16.0,17.0,18.0,18.58,19.83,22.0,0.12,8.89,779.0 +163,simulated,7,2022.0,HotelLarge,International Falls,MISO_North,11000,DOE,1.01,470551168.78,73.45,6434.0,100.0,513844.11,513844.11,45.29,53715.89,73135.09,4000.08,18808.63,0.0,55.38,73.8,81.0,86.0,90.53,93.49,96.02,98.0,99.26,99.82,0.0,57226.39,8760.0,0.03,474907166.08,100.0,75.14,6582.0,612713.85,612713.85,54.01,54213.15,72152.41,19441.93,39903.76,0.0,0.0,73.38,90.83,94.81,95.3,95.54,95.74,96.29,98.08,99.47,0.02,65219.34,8760.0,612713.85,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,1.19,48.62,4259.0 +164,simulated,3C,2004.0,OutPatientHealthCare,San Francisco,CAISO,4000,DOE,0.45,807403480.73,100.0,8760.0,100.0,302206.85,302206.85,79.44,92169.35,92169.35,87887.23,87887.23,13408.13,13408.13,12.99,32.26,52.36,73.62,85.32,92.12,96.96,98.93,99.7,39177.53,123904.1,8760.0,0.9,365470893.59,100.0,100.0,8760.0,150985.65,150985.65,39.69,41720.42,41720.42,36783.11,36783.11,9800.53,9800.53,3.76,32.64,66.32,83.08,92.43,96.87,98.76,99.58,99.85,27300.28,51711.31,8760.0,126265.06,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.5,100.0,8760.0 +165,simulated,2A,2004.0,OutPatientHealthCare,Houston,ERCOT,4000,DOE,0.17,1742004256.36,99.97,8757.0,100.0,548639.98,548639.98,144.23,198858.93,198927.06,167103.42,167201.45,0.0,15.57,7.83,27.17,48.56,68.23,77.1,81.94,86.68,92.1,97.99,104316.25,256750.68,8760.0,0.94,296057175.5,100.0,100.0,8760.0,189749.79,189749.79,49.88,33796.48,33796.48,27543.45,27543.45,3621.77,3621.77,27.19,68.89,86.85,94.39,97.57,99.04,99.65,99.9,99.97,18114.17,42703.84,8760.0,189749.79,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.35,99.97,8757.0 +166,simulated,2B,2004.0,OfficeLarge,Tucson,WestConnect_South,46000,DOE,0.05,5919525536.17,75.32,6598.0,100.0,2697714.39,2697714.39,58.24,675744.92,897169.68,535260.08,762395.77,0.0,0.01,37.49,50.22,64.68,73.93,79.63,86.13,93.76,97.57,99.58,0.15,1115020.87,8760.0,0.36,280642947.36,100.0,26.55,2326.0,1497679.64,1497679.64,32.33,32036.87,120654.75,0.0,73818.94,0.0,2.11,92.24,96.86,99.14,99.67,99.89,99.94,99.98,99.98,99.99,0.0,464.95,8760.0,1497679.32,42.0,21.71,21.95,-1.06,9.58,13.0,14.58,16.0,19.0,21.95,24.58,27.25,28.76,30.42,33.76,0.56,21.2,1857.0 +167,simulated,5B,2022.0,HotelLarge,Denver,WestConnect_North,11000,DOE,0.37,551415046.61,83.93,7352.0,100.0,358527.33,358527.33,31.6,62946.92,75002.05,18807.61,32367.2,0.0,70.36,59.73,68.82,75.32,80.54,85.51,91.78,96.14,98.54,99.75,1852.22,105549.74,8760.0,0.1,202453509.52,100.0,60.14,5268.0,167902.27,167902.27,14.8,23111.13,38430.81,547.24,32886.42,0.0,0.0,60.3,70.39,79.55,86.45,92.53,97.17,99.55,99.9,99.98,0.0,41019.36,8760.0,167684.14,39.05,10.02,9.66,-22.58,-4.0,0.0,1.42,3.17,6.25,9.66,13.75,17.0,18.58,20.14,25.0,0.47,44.13,3866.0 +168,simulated,6A,2022.0,OfficeLarge,Rochester,NYISO,46000,DOE,0.49,1268803252.44,37.93,3323.0,100.0,2097179.17,2097179.17,45.28,144840.55,381824.63,0.0,147379.18,0.0,0.0,82.89,87.93,90.75,93.0,94.54,95.63,98.62,99.73,99.93,0.0,24234.17,8760.0,0.0,621757517.17,100.0,44.21,3873.0,2160634.44,2160634.44,46.65,70976.89,160536.41,0.0,64244.04,0.0,0.01,89.47,95.78,97.97,98.76,99.11,99.47,99.78,99.89,99.94,0.0,43605.89,8760.0,2160634.44,33.9,6.46,7.8,-36.7,-11.45,-4.4,-2.8,-0.89,2.89,7.8,11.91,15.46,17.16,18.76,22.8,1.03,7.02,615.0 +169,simulated,2A,2004.0,HotelLarge,Houston,ERCOT,11000,DOE,0.1,3671002761.36,91.95,8055.0,100.0,945857.21,945857.21,83.37,419064.24,455742.12,491386.29,527128.62,0.0,584.39,23.98,29.69,34.53,40.86,48.41,59.22,74.51,88.71,99.1,114782.91,665948.2,8760.0,0.56,363520217.86,100.0,94.09,8242.0,215326.85,215326.85,18.98,41497.74,44105.83,27755.53,30933.91,0.0,2.76,42.63,63.41,76.63,85.78,91.37,95.5,97.9,99.51,99.89,11598.7,61170.6,8760.0,215326.85,39.4,20.36,21.91,-6.1,8.26,12.82,14.75,16.7,19.43,21.91,23.9,25.35,26.24,27.18,30.1,0.23,86.04,7537.0 +170,simulated,4C,2004.0,Hospital,Seattle,NorthernGrid_West,22000,DOE,0.63,4159378904.45,100.0,8760.0,100.0,1677081.41,1677081.41,74.75,474814.94,474814.94,418273.38,418273.38,67599.77,67599.77,1.99,35.06,65.79,81.34,92.32,95.89,98.2,99.38,99.92,293995.27,592634.62,8760.0,0.94,2614315120.13,100.0,100.0,8760.0,535256.35,535256.35,23.86,298437.8,298437.8,295391.89,295391.89,119720.09,119720.09,0.0,0.0,0.53,10.39,34.6,64.29,85.89,97.32,99.75,248705.76,345717.75,8760.0,442528.98,31.55,11.24,11.06,-5.6,3.9,5.89,6.74,7.66,9.4,11.06,12.55,14.11,15.0,16.1,19.4,0.32,100.0,8760.0 +171,simulated,1A,2004.0,OutPatientHealthCare,Miami,FRCC,4000,DOE,0.1,2147311291.8,100.0,8760.0,100.0,526172.16,526172.16,138.32,245126.86,245126.86,204915.5,204915.5,38945.75,38945.75,0.14,7.32,25.26,52.13,65.43,71.28,78.61,87.6,95.83,157344.05,343833.04,8760.0,1.0,212489226.6,100.0,100.0,8760.0,122503.27,122503.27,32.2,24256.76,24256.76,20488.26,20488.26,7738.18,7738.18,12.21,63.62,85.14,94.36,97.68,99.16,99.74,99.89,99.95,15042.68,29808.92,8760.0,52927.63,35.35,24.51,25.1,5.25,18.3,21.53,22.45,23.01,24.19,25.1,26.1,26.99,27.55,28.26,29.65,0.23,100.0,8760.0 +172,simulated,2A,2004.0,OfficeLarge,Tampa,FRCC,46000,DOE,0.02,9867587028.18,99.7,8734.0,100.0,3430781.62,3430781.62,74.07,1126436.88,1129790.13,1146090.67,1151275.16,0.0,9.52,25.16,35.71,46.79,59.06,70.02,86.94,94.27,98.4,99.9,337796.61,1871261.54,8760.0,0.4,217511749.99,100.0,23.05,2019.0,1667265.09,1667265.09,35.99,24830.11,107732.42,0.0,36950.92,0.0,1.79,95.24,97.97,99.03,99.57,99.77,99.9,99.98,99.98,99.99,0.0,0.0,8760.0,1667265.09,36.07,21.89,23.74,-3.4,11.39,15.85,17.38,18.76,21.57,23.74,25.0,26.1,26.7,27.49,30.0,0.49,22.75,1993.0 +173,simulated,7,2004.0,Hospital,International Falls,MISO_North,22000,DOE,0.92,3737796186.8,81.78,7164.0,100.0,3254122.28,3254122.28,145.04,426689.06,521747.09,250148.71,329020.36,0.0,0.0,58.9,68.42,87.16,95.7,98.98,99.67,99.78,99.92,99.95,56965.27,845485.92,8760.0,0.45,3454257495.8,100.0,100.0,8760.0,1282132.07,1282132.07,57.15,394321.63,394321.63,317476.86,317476.86,16077.66,16077.66,0.4,28.15,64.38,79.17,86.03,91.61,95.18,98.01,99.5,246743.95,469764.35,8760.0,1282132.07,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,0.39,81.78,7164.0 +174,simulated,3C,2004.0,Hospital,San Francisco,CAISO,22000,DOE,0.5,5031527719.44,100.0,8760.0,100.0,1496173.59,1496173.59,66.69,574375.31,574375.31,527449.49,527449.49,223781.0,223781.0,0.0,2.01,29.35,63.76,80.7,94.05,97.5,99.04,99.68,434144.37,664721.0,8760.0,1.0,2511941043.29,100.0,100.0,8760.0,442501.48,442501.48,19.72,286751.26,286751.26,291988.36,291988.36,104887.17,104887.17,0.0,0.0,0.1,2.44,18.4,37.76,59.18,85.48,98.3,236016.47,334853.64,8760.0,128657.51,32.55,13.79,13.48,2.84,9.29,10.77,11.35,11.74,12.68,13.48,14.36,15.28,15.89,16.7,18.9,0.3,100.0,8760.0 +175,simulated,3A,2022.0,Hospital,Sacramento,CAISO,22000,DOE,0.35,3570395379.31,100.0,8760.0,100.0,1506625.64,1506625.64,67.15,407579.38,407579.38,290007.12,290007.12,36783.51,36783.51,29.47,51.34,66.13,75.15,83.47,88.82,92.04,94.69,99.55,118912.72,600366.19,8760.0,0.84,1266810838.73,100.0,100.0,8760.0,290131.84,290131.84,12.93,144613.11,144613.11,138639.15,138639.15,43195.4,43195.4,0.0,0.08,8.63,29.41,56.05,75.5,87.99,95.23,99.14,110606.3,173030.2,8760.0,237246.65,42.0,15.9,14.42,-1.58,6.42,9.0,10.0,11.0,12.83,14.42,16.58,19.25,21.17,23.17,28.17,0.19,100.0,8760.0 +176,simulated,7,2004.0,HotelLarge,International Falls,MISO_North,11000,DOE,1.42,916564691.15,56.85,4980.0,100.0,781378.58,781378.58,68.87,104630.67,184049.13,6221.82,98637.16,0.0,226.95,69.85,75.75,80.16,84.65,89.6,92.67,96.3,98.69,99.66,0.0,144825.35,8760.0,0.09,1303063057.8,100.0,100.0,8760.0,1006755.64,1006755.64,88.74,148751.49,148751.49,74831.55,74831.55,1.89,1.89,59.42,78.08,86.56,93.29,95.1,95.3,95.5,95.78,97.11,36319.64,175903.74,8760.0,1006755.64,34.75,3.36,5.0,-35.35,-18.01,-9.9,-6.53,-3.65,0.11,5.0,9.19,13.47,15.25,17.09,20.84,1.29,56.85,4980.0 +214,simulated,4C,1996.0,Academic,Eureka,CAISO,14000,DEER,4.48,138043049.23,93.01,8148.0,100.0,806098.9,806098.9,57.81,15758.34,16941.95,3288.03,4082.23,0.0,0.0,95.24,98.2,99.33,99.61,99.84,99.92,99.95,99.97,99.97,195.55,9878.25,8760.0,0.17,618379180.1,100.0,100.0,8760.0,658724.43,658724.43,47.24,70591.23,70591.23,24376.42,24376.42,613.55,613.55,64.46,72.5,93.32,96.6,98.48,99.3,99.68,99.85,99.92,9497.28,152290.12,8760.0,598878.76,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.82,93.01,8148.0 +215,simulated,4C,1996.0,Academic,Eureka,CAISO,44000,DEER,2.29,565917311.11,98.38,8618.0,100.0,2110256.55,2110256.55,47.82,64602.43,65666.9,18762.39,19386.3,0.0,0.0,91.5,97.39,98.7,99.41,99.65,99.86,99.95,99.95,99.95,8305.74,52184.82,8760.0,0.29,1294350869.17,100.0,100.0,8760.0,1211951.85,1211951.85,27.47,147756.95,147756.95,102485.48,102485.48,9752.92,9752.92,52.89,78.94,92.19,96.06,98.13,99.02,99.51,99.84,99.95,21941.49,219477.69,8760.0,946083.04,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.57,98.38,8618.0 +216,simulated,4C,1996.0,Hospital,Eureka,CAISO,23000,DEER,3.07,172184383.77,86.53,7580.0,100.0,859948.76,859948.76,37.02,19655.75,22715.62,3725.9,4305.67,0.0,0.33,94.09,97.95,99.06,99.52,99.75,99.9,99.94,99.95,99.97,1755.36,6825.5,8760.0,0.23,528979088.37,100.0,100.0,8760.0,474302.4,474302.4,20.42,60385.74,60385.74,58870.48,58870.48,3335.51,3335.51,44.92,85.01,93.68,97.04,98.45,99.2,99.54,99.79,99.9,21920.27,75198.59,8760.0,443291.01,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.55,86.53,7580.0 +217,simulated,4C,1996.0,Manufacturing,Eureka,CAISO,19000,DEER,33.36,107623129.29,98.07,8591.0,100.0,864241.25,864241.25,46.51,12285.75,12527.43,5760.54,5837.58,0.0,0.0,98.55,99.7,99.87,99.93,99.94,99.95,99.95,99.97,99.98,4029.38,9829.76,8760.0,0.03,3589862994.15,100.0,100.0,8760.0,1353366.17,1353366.17,72.84,409801.71,409801.71,374589.39,374589.39,5429.51,5429.51,12.82,29.75,55.4,72.13,85.56,93.82,97.67,99.17,99.75,238761.62,567300.8,8760.0,1339951.4,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,1.57,98.07,8591.0 +218,simulated,4C,1996.0,OfficeLarge,Eureka,CAISO,16000,DEER,2.79,145892076.21,23.74,2080.0,100.0,831072.48,831072.48,51.12,16654.35,70140.42,0.0,40216.08,0.0,9.41,93.42,97.2,98.76,99.41,99.67,99.87,99.93,99.95,99.95,0.0,0.0,8760.0,0.13,406417423.0,100.0,100.0,8760.0,503988.95,503988.95,31.0,46394.68,46394.68,22994.5,22994.5,2412.52,2412.52,74.63,86.64,92.56,95.76,97.4,98.33,99.22,99.57,99.85,5887.63,51723.64,8760.0,479391.91,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.61,23.74,2080.0 +219,simulated,3C,1996.0,Academic,Napa,CAISO,14000,DEER,0.6,919862120.67,95.16,8336.0,100.0,1259585.05,1259585.05,90.33,105007.09,110348.14,4717.09,5740.89,0.0,0.0,80.42,87.69,89.74,91.22,92.84,95.58,98.12,99.36,99.84,1145.43,74599.78,8760.0,0.41,552746192.56,100.0,100.0,8760.0,757584.45,757584.45,54.33,63098.88,63098.88,23177.31,23177.31,612.68,612.68,69.28,87.5,96.44,98.38,99.17,99.58,99.83,99.92,99.98,9069.05,111902.62,8760.0,757432.05,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.6,95.16,8336.0 +220,simulated,3C,1996.0,Academic,Napa,CAISO,44000,DEER,0.38,2968521926.97,99.0,8672.0,100.0,3193253.45,3193253.45,72.37,338872.37,342311.11,36237.85,37390.02,0.0,0.0,75.29,83.13,87.29,89.53,91.56,94.11,96.91,99.14,99.93,12029.13,314713.35,8760.0,0.49,1123691042.7,100.0,100.0,8760.0,1234809.83,1234809.83,27.98,128275.23,128275.23,84960.32,84960.32,8891.74,8891.74,59.01,85.58,94.67,97.21,98.47,99.2,99.59,99.76,99.95,20359.02,187601.72,8760.0,1050647.16,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.39,99.0,8672.0 +221,simulated,3C,1996.0,Hospital,Napa,CAISO,23000,DEER,0.43,1179832130.57,87.71,7683.0,100.0,1318414.13,1318414.13,56.76,134684.03,153563.99,5562.28,9144.92,0.0,4.97,77.75,84.44,87.08,89.17,90.83,93.77,96.92,99.32,99.91,2400.31,105116.04,8760.0,0.44,508032569.49,100.0,100.0,8760.0,579442.73,579442.73,24.95,57994.59,57994.59,49949.47,49949.47,3068.59,3068.59,54.22,89.39,95.31,97.44,98.57,99.29,99.74,99.87,99.95,14910.0,71093.9,8760.0,501895.22,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.44,87.71,7683.0 +222,simulated,3C,1996.0,Manufacturing,Napa,CAISO,19000,DEER,3.08,904011447.64,98.6,8637.0,100.0,1543140.89,1543140.89,83.05,103197.65,104667.3,8272.24,8499.75,0.0,0.0,84.9,88.31,90.98,93.66,96.0,97.81,99.09,99.63,99.91,4833.48,52059.01,8760.0,0.06,2784578679.1,100.0,100.0,8760.0,1497548.56,1497548.56,80.6,317874.28,317874.28,268962.17,268962.17,4379.22,4379.22,36.82,54.03,70.67,82.03,91.27,96.5,98.74,99.62,99.9,44575.06,503871.68,8760.0,1485107.31,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.97,98.6,8637.0 +223,simulated,3C,1996.0,OfficeLarge,Napa,CAISO,16000,DEER,0.31,1180455151.99,43.54,3814.0,100.0,1240594.84,1240594.84,76.32,134755.15,309505.81,0.0,157724.5,0.0,19.87,76.03,82.59,86.89,88.9,90.34,91.8,94.81,98.4,99.76,0.0,111516.14,8760.0,0.31,368727600.32,100.0,100.0,8760.0,537200.94,537200.94,33.05,42092.19,42092.19,20911.21,20911.21,2234.91,2234.91,78.08,90.1,94.41,96.27,97.67,98.71,99.41,99.71,99.85,4695.88,44801.93,8760.0,524025.23,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.43,43.54,3814.0 +224,simulated,3C,1996.0,Academic,Oakland,CAISO,14000,DEER,0.93,505692108.88,95.35,8353.0,100.0,1034721.98,1034721.98,74.21,57727.41,60540.18,5631.56,6294.53,0.0,0.0,83.18,91.28,95.22,97.1,97.95,98.54,99.12,99.61,99.83,765.62,49505.0,8760.0,0.44,467777033.57,100.0,100.0,8760.0,692705.21,692705.21,49.68,53399.2,53399.2,14483.88,14483.88,611.98,611.98,72.25,78.79,98.05,99.34,99.69,99.89,99.95,99.98,99.99,8677.51,87888.7,8760.0,691914.92,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.67,95.35,8353.0 +225,simulated,3C,1996.0,Academic,Oakland,CAISO,44000,DEER,0.52,1751025861.12,98.94,8667.0,100.0,2769488.49,2769488.49,62.76,199888.8,202033.67,34520.45,35386.54,0.0,0.0,78.96,88.23,93.24,95.74,97.58,98.33,99.12,99.6,99.87,11629.74,200065.29,8760.0,0.53,911948324.62,100.0,100.0,8760.0,919700.02,919700.02,20.84,104103.69,104103.69,72104.89,72104.89,8934.47,8934.47,59.33,79.25,95.33,97.71,98.8,99.36,99.66,99.84,99.94,19909.21,173967.9,8760.0,918675.95,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.33,98.94,8667.0 +226,simulated,3C,1996.0,Hospital,Oakland,CAISO,23000,DEER,0.62,633974443.96,87.95,7704.0,100.0,1074087.56,1074087.56,46.24,72371.51,82291.59,5253.96,6991.71,0.0,0.03,81.29,89.37,93.37,95.45,97.17,97.95,98.53,99.29,99.79,2282.18,67966.7,8760.0,0.39,392343155.75,100.0,100.0,8760.0,494387.54,494387.54,21.29,44788.03,44788.03,34921.8,34921.8,3070.77,3070.77,56.93,92.68,97.2,98.86,99.43,99.73,99.82,99.94,99.99,8515.32,66402.61,8760.0,434645.39,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.46,87.95,7704.0 +227,simulated,3C,1996.0,Manufacturing,Oakland,CAISO,19000,DEER,5.46,391701320.87,98.28,8609.0,100.0,1278942.63,1278942.63,68.83,44714.76,45499.05,7484.96,7675.12,0.0,0.0,91.92,95.54,97.48,98.52,99.11,99.51,99.71,99.91,99.97,4848.31,30745.87,8760.0,0.06,2136734059.15,100.0,100.0,8760.0,1172944.22,1172944.22,63.13,243919.41,243919.41,188782.76,188782.76,4220.43,4220.43,37.98,57.41,71.2,82.41,91.39,96.58,98.68,99.54,99.87,40023.58,392211.75,8760.0,1158214.15,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.92,98.28,8609.0 +228,simulated,3C,1996.0,OfficeLarge,Oakland,CAISO,16000,DEER,0.42,644202391.7,43.39,3801.0,100.0,1029725.41,1029725.41,63.34,73539.09,169482.34,0.0,95043.4,0.0,11.31,79.26,87.55,92.34,95.15,96.66,97.69,98.22,98.86,99.65,0.0,67666.7,8760.0,0.24,268190965.51,100.0,100.0,8760.0,473485.66,473485.66,29.13,30615.41,30615.41,16593.13,16593.13,2240.71,2240.71,83.87,92.41,96.19,98.16,98.94,99.35,99.62,99.86,99.95,4309.9,31180.91,8760.0,473485.66,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.46,43.39,3801.0 +229,simulated,3C,1996.0,Academic,San Jose,CAISO,14000,DEER,0.37,1389938680.15,96.02,8411.0,100.0,1433719.49,1433719.49,102.82,158668.8,165252.49,10580.6,13718.14,0.0,0.0,75.01,82.75,86.05,87.32,90.07,93.73,97.16,99.35,99.94,1706.35,143225.38,8760.0,0.51,519090672.69,100.0,100.0,8760.0,758888.6,758888.6,54.42,59256.93,59256.93,20980.95,20980.95,610.66,610.66,69.7,89.46,97.16,98.55,99.43,99.76,99.89,99.93,99.99,8882.16,104403.66,8760.0,758888.59,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.53,96.02,8411.0 +230,simulated,3C,1996.0,Academic,San Jose,CAISO,44000,DEER,0.25,4248815742.31,99.29,8698.0,100.0,3586148.04,3586148.04,81.27,485024.63,488481.92,72935.77,74896.83,0.0,0.0,69.59,77.75,82.67,85.31,88.34,92.61,97.05,99.11,99.89,15548.74,558877.98,8760.0,0.6,1078077450.74,100.0,100.0,8760.0,1196365.44,1196365.44,27.11,123068.2,123068.2,82296.0,82296.0,8208.53,8208.53,58.71,86.55,94.7,96.78,98.47,99.24,99.67,99.86,99.94,19300.52,182061.35,8760.0,1080017.75,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.33,99.29,8698.0 +231,simulated,3C,1996.0,Hospital,San Jose,CAISO,23000,DEER,0.28,1722174166.01,90.01,7885.0,100.0,1432056.28,1432056.28,61.66,196595.22,218411.44,20808.58,46118.43,0.0,3.3,71.46,79.0,81.92,84.03,86.8,91.08,95.67,98.85,99.86,3103.91,192114.14,8760.0,0.52,484648569.95,100.0,100.0,8760.0,599691.89,599691.89,25.82,55325.18,55325.18,49038.97,49038.97,2848.58,2848.58,61.51,91.63,96.19,97.59,98.64,99.38,99.75,99.95,99.99,13014.53,69693.37,8760.0,518440.95,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.42,90.01,7885.0 +232,simulated,3C,1996.0,Manufacturing,San Jose,CAISO,19000,DEER,1.52,1551605138.21,98.78,8653.0,100.0,1712907.48,1712907.48,92.19,177123.87,179314.13,11559.53,12046.3,0.0,0.0,77.97,82.23,85.57,89.32,92.5,95.07,96.95,98.37,99.37,5400.45,105679.62,8760.0,0.07,2356622847.42,100.0,100.0,8760.0,1420004.82,1420004.82,76.43,269020.87,269020.87,164014.39,164014.39,3884.07,3884.07,48.03,61.04,72.64,82.8,90.75,95.51,98.2,99.45,99.77,32509.54,458113.48,8760.0,1333489.08,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.83,98.78,8653.0 +233,simulated,3C,1996.0,OfficeLarge,San Jose,CAISO,16000,DEER,0.22,1657591088.01,51.96,4552.0,100.0,1279140.41,1279140.41,78.69,189222.73,364145.67,1168.09,209886.25,0.0,2.53,69.11,76.21,81.77,84.34,86.22,88.36,92.29,97.09,99.52,0.0,231655.8,8760.0,0.41,357515674.39,100.0,100.0,8760.0,548381.1,548381.1,33.73,40812.29,40812.29,19517.14,19517.14,2093.58,2093.58,77.66,91.34,94.79,96.4,97.95,98.97,99.6,99.85,99.95,4083.45,47461.15,8760.0,548381.1,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.43,51.96,4552.0 +234,simulated,3C,1996.0,Academic,Santa Maria,CAISO,14000,DEER,0.75,632923941.04,96.54,8457.0,100.0,1078486.02,1078486.02,77.34,72251.59,74840.24,6316.44,6860.44,0.0,0.0,81.12,89.24,93.36,95.62,96.82,97.73,98.69,99.6,99.87,986.13,64678.88,8760.0,0.49,472287836.0,100.0,100.0,8760.0,634973.99,634973.99,45.54,53914.14,53914.14,14212.25,14212.25,612.73,612.73,69.5,77.93,98.08,99.1,99.61,99.79,99.92,99.94,99.99,8615.83,92013.54,8760.0,634841.92,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.59,96.54,8457.0 +235,simulated,3C,1996.0,Academic,Santa Maria,CAISO,44000,DEER,0.43,2177188266.72,98.88,8662.0,100.0,2735227.89,2735227.89,61.99,248537.47,251349.37,35827.37,36738.29,0.0,0.0,74.9,84.21,89.79,93.2,95.75,97.28,98.39,99.28,99.87,12159.69,277943.9,8760.0,0.57,936088618.07,100.0,100.0,8760.0,962901.71,962901.71,21.82,106859.43,106859.43,75231.32,75231.32,9082.71,9082.71,58.14,82.05,95.84,97.97,98.89,99.38,99.7,99.86,99.91,19949.74,177392.9,8760.0,933378.84,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.35,98.88,8662.0 +236,simulated,3C,1996.0,Hospital,Santa Maria,CAISO,23000,DEER,0.5,794883885.27,87.79,7690.0,100.0,1171534.92,1171534.92,50.44,90740.17,103365.91,5723.0,7715.82,0.0,5.5,79.0,86.84,91.35,94.55,96.29,97.13,98.6,99.38,99.9,2552.81,86569.56,8760.0,0.48,397829841.16,100.0,100.0,8760.0,510135.97,510135.97,21.96,45414.37,45414.37,38118.88,38118.88,3116.25,3116.25,57.13,93.94,97.63,98.87,99.34,99.66,99.86,99.97,99.99,12217.42,66491.41,8760.0,443003.59,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.44,87.79,7690.0 +237,simulated,3C,1996.0,Manufacturing,Santa Maria,CAISO,19000,DEER,4.58,496745983.35,98.06,8590.0,100.0,1222210.2,1222210.2,65.78,56706.16,57828.4,7666.12,7869.03,0.0,0.0,88.23,93.3,95.97,97.59,98.5,99.2,99.55,99.68,99.89,4848.6,42643.44,8760.0,0.07,2272691091.72,100.0,100.0,8760.0,1227443.02,1227443.02,66.06,259439.62,259439.62,216824.84,216824.84,4510.24,4510.24,36.96,54.18,70.89,84.06,91.75,96.23,98.53,99.52,99.86,43648.42,402257.41,8760.0,1191705.36,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,1.0,98.06,8590.0 +238,simulated,3C,1996.0,OfficeLarge,Santa Maria,CAISO,16000,DEER,0.33,816731490.08,43.23,3787.0,100.0,1130513.27,1130513.27,69.54,93234.19,215667.15,0.0,131523.36,0.0,10.16,76.76,85.0,90.27,93.94,95.87,96.85,97.74,98.89,99.67,0.0,96298.62,8760.0,0.31,268061115.52,100.0,100.0,8760.0,501735.53,501735.53,30.86,30600.58,30600.58,17060.16,17060.16,2269.6,2269.6,84.43,93.37,96.86,98.21,98.87,99.44,99.81,99.94,99.97,4376.65,31563.01,8760.0,501735.53,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.44,43.23,3787.0 +239,simulated,3B,1996.0,Academic,Los Angeles,CAISO,14000,DEER,0.28,1307761682.28,97.53,8544.0,100.0,1202087.76,1202087.76,86.21,149287.86,153061.99,25036.06,28232.4,0.0,0.0,69.0,80.7,86.12,88.7,90.54,92.87,96.26,98.79,99.66,2754.96,174755.99,8760.0,0.73,369003854.99,100.0,100.0,8760.0,311604.47,311604.47,22.35,42123.73,42123.73,12959.68,12959.68,611.54,611.54,65.01,75.47,80.73,81.72,99.35,99.67,99.83,99.93,99.95,7805.17,60695.05,8760.0,311573.44,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.26,97.53,8544.0 +240,simulated,3B,1996.0,Academic,Los Angeles,CAISO,44000,DEER,0.16,4152862590.07,99.38,8706.0,100.0,3081517.48,3081517.48,69.83,474071.07,477011.55,156026.81,160395.26,0.0,0.0,60.68,74.17,81.97,85.92,88.94,92.27,95.91,98.71,99.69,23610.12,640660.69,8760.0,0.8,682140046.67,100.0,100.0,8760.0,519263.85,519263.85,11.77,77869.87,77869.87,52663.95,52663.95,8199.72,8199.72,49.68,70.13,80.06,92.13,98.94,99.58,99.84,99.94,99.95,17982.09,121213.0,8760.0,519262.45,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.17,99.38,8706.0 +241,simulated,3B,1996.0,Hospital,Los Angeles,CAISO,23000,DEER,0.17,1580710924.59,93.0,8147.0,100.0,1241266.24,1241266.24,53.44,180446.45,194023.68,63130.85,76607.07,0.0,4.69,63.73,77.4,83.3,86.68,89.83,92.92,95.55,98.01,99.57,5102.72,215008.23,8760.0,0.69,262285930.68,100.0,100.0,8760.0,276879.41,276879.41,11.92,29941.32,29941.32,20502.83,20502.83,2840.86,2840.86,58.93,72.43,97.4,98.68,99.58,99.81,99.92,99.94,99.99,4755.14,57269.01,8760.0,276879.41,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.22,93.0,8147.0 +242,simulated,3B,1996.0,Manufacturing,Los Angeles,CAISO,19000,DEER,0.98,1031838531.36,98.45,8624.0,100.0,1337676.29,1337676.29,72.0,117789.79,119647.33,26379.67,28190.43,0.0,0.0,76.53,84.85,88.97,93.5,97.0,98.65,99.47,99.82,99.94,6225.36,121909.22,8760.0,0.14,1015122477.69,100.0,100.0,8760.0,805071.18,805071.18,43.33,115881.56,115881.56,36954.86,36954.86,3823.89,3823.89,61.05,71.38,81.06,89.18,94.35,97.43,98.95,99.7,99.94,15860.03,190054.87,8760.0,805070.86,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.6,98.45,8624.0 +243,simulated,3B,1996.0,OfficeLarge,Los Angeles,CAISO,16000,DEER,0.11,1573630482.5,60.59,5308.0,100.0,1128392.42,1128392.42,69.41,179638.18,296463.92,34368.9,177224.45,0.0,19.24,61.5,74.1,81.26,85.41,87.68,89.43,91.71,96.59,99.34,0.0,238133.97,8760.0,0.53,174525414.85,100.0,100.0,8760.0,347801.74,347801.74,21.4,19922.99,19922.99,11506.91,11506.91,2075.69,2075.69,87.12,94.16,98.08,99.13,99.65,99.83,99.89,99.94,99.95,3185.54,23840.03,8760.0,347801.74,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.31,60.59,5308.0 +244,simulated,3B,1996.0,Academic,San Diego,CAISO,14000,DEER,0.27,1401810324.59,97.76,8564.0,100.0,1219731.96,1219731.96,87.47,160024.01,163686.4,27063.85,30843.22,0.0,0.0,69.6,81.22,84.45,85.8,88.4,92.19,96.05,98.7,99.58,3054.39,166784.09,8760.0,0.75,375911143.88,100.0,100.0,8760.0,287463.43,287463.43,20.62,42912.23,42912.23,12965.12,12965.12,610.73,610.73,61.89,71.68,79.24,81.36,97.85,99.63,99.78,99.89,99.94,7712.32,70832.11,8760.0,286954.18,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.24,97.76,8564.0 +245,simulated,3B,1996.0,Academic,San Diego,CAISO,44000,DEER,0.16,4395069534.97,99.61,8726.0,100.0,2980235.86,2980235.86,67.54,501720.27,503675.17,173259.01,175314.58,0.0,0.0,59.0,73.03,79.62,82.88,86.13,90.79,95.41,98.42,99.57,25671.8,661496.61,8760.0,0.83,707667285.11,100.0,100.0,8760.0,435210.82,435210.82,9.86,80783.94,80783.94,55230.14,55230.14,8023.48,8023.48,45.02,63.2,74.09,86.13,93.68,99.42,99.7,99.86,99.94,17681.15,135739.62,8760.0,425540.29,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.15,99.61,8726.0 +246,simulated,3B,1996.0,Hospital,San Diego,CAISO,23000,DEER,0.15,1660106693.65,94.2,8252.0,100.0,1213433.27,1213433.27,52.24,189509.9,201176.28,70812.74,82498.24,0.0,28.43,61.48,75.63,81.14,85.34,88.95,91.95,95.37,98.12,99.58,5935.19,232631.36,8760.0,0.71,257293992.12,100.0,100.0,8760.0,274052.92,274052.92,11.8,29371.46,29371.46,20966.65,20966.65,2785.62,2785.62,58.13,73.37,98.12,99.27,99.67,99.91,99.98,99.98,99.99,4889.54,55896.65,8760.0,273689.51,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.23,94.2,8252.0 +247,simulated,3B,1996.0,Manufacturing,San Diego,CAISO,19000,DEER,0.84,1110673871.32,98.41,8621.0,100.0,1320283.91,1320283.91,71.06,126789.25,128833.53,31825.82,33675.69,0.0,0.0,75.55,82.65,87.61,92.71,96.51,98.3,99.11,99.7,99.93,6342.1,126012.28,8760.0,0.16,934449648.7,100.0,100.0,8760.0,747930.29,747930.29,40.25,106672.33,106672.33,36196.21,36196.21,3746.4,3746.4,64.0,73.18,81.39,88.12,93.7,96.89,98.69,99.47,99.76,15457.97,164463.57,8760.0,747929.43,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.57,98.41,8621.0 +248,simulated,3B,1996.0,OfficeLarge,San Diego,CAISO,16000,DEER,0.11,1660370508.05,62.42,5468.0,100.0,1080158.73,1080158.73,66.45,189540.01,303652.25,43397.19,178683.16,0.0,13.12,60.73,72.09,78.71,81.74,83.77,86.7,91.92,97.33,99.54,0.0,254435.9,8760.0,0.61,174964466.64,100.0,100.0,8760.0,309270.59,309270.59,19.03,19973.11,19973.11,12334.24,12334.24,2038.13,2038.13,84.49,92.15,97.97,99.41,99.77,99.93,99.97,99.98,99.98,3198.02,24232.34,8760.0,309270.59,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.29,62.42,5468.0 +249,simulated,3B,1996.0,Academic,Long Beach,CAISO,14000,DEER,0.21,1879489297.06,97.5,8541.0,100.0,1545429.06,1545429.06,110.83,214553.57,220054.95,42293.97,48302.59,0.0,0.0,67.11,78.8,81.29,83.6,87.98,92.98,97.0,99.37,99.87,2775.8,234353.25,8760.0,0.75,387604100.39,100.0,100.0,8760.0,425873.32,425873.32,30.54,44247.04,44247.04,12793.9,12793.9,610.58,610.58,64.53,77.79,88.87,98.55,99.53,99.81,99.86,99.98,99.99,7557.76,74567.24,8760.0,425833.87,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.28,97.5,8541.0 +250,simulated,3B,1996.0,Academic,Long Beach,CAISO,44000,DEER,0.13,5730166086.53,99.61,8726.0,100.0,3447103.28,3447103.28,78.12,654128.55,656677.3,223670.03,227071.29,0.0,0.0,57.11,68.71,75.74,79.16,83.07,88.26,93.44,97.92,99.75,24390.96,971875.45,8760.0,0.78,741991083.32,100.0,100.0,8760.0,647761.45,647761.45,14.68,84702.18,84702.18,59163.81,59163.81,7717.3,7717.3,51.85,72.36,89.62,97.85,99.0,99.62,99.86,99.97,99.98,17222.15,143865.67,8760.0,510427.0,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.19,99.61,8726.0 +251,simulated,3B,1996.0,Hospital,Long Beach,CAISO,23000,DEER,0.13,2318023369.93,93.08,8154.0,100.0,1313132.28,1313132.28,56.54,264614.54,284280.52,87516.44,103460.46,0.0,2.71,57.95,70.29,74.94,77.79,80.94,85.14,90.01,95.46,99.2,5044.58,395962.91,8760.0,0.68,290062257.78,100.0,100.0,8760.0,290602.29,290602.29,12.51,33112.13,33112.13,23015.23,23015.23,2689.62,2689.62,54.76,79.19,95.35,97.89,99.14,99.71,99.86,99.95,99.95,4737.53,55624.46,8760.0,288427.67,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.22,93.08,8154.0 +252,simulated,3B,1996.0,Manufacturing,Long Beach,CAISO,19000,DEER,0.6,1837868295.2,98.63,8640.0,100.0,1708260.38,1708260.38,91.94,209802.32,212716.24,43556.54,45651.44,0.0,0.0,69.43,76.79,83.05,88.11,92.9,96.7,98.57,99.41,99.81,6334.51,291705.32,8760.0,0.13,1100288116.6,100.0,100.0,8760.0,1017077.01,1017077.01,54.74,125603.67,125603.67,34054.98,34054.98,3614.27,3614.27,67.59,76.11,83.86,89.93,94.47,97.77,99.37,99.91,99.95,13658.4,190666.5,8760.0,927612.35,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.6,98.63,8640.0 +253,simulated,3B,1996.0,OfficeLarge,Long Beach,CAISO,16000,DEER,0.09,2186502161.03,61.58,5394.0,100.0,1194031.68,1194031.68,73.45,249600.7,405358.21,54874.84,269156.39,0.0,13.51,57.17,67.28,73.98,77.61,79.76,82.58,87.26,93.73,99.18,0.0,383623.64,8760.0,0.55,200008711.4,100.0,100.0,8760.0,355064.68,355064.68,21.84,22832.04,22832.04,13538.15,13538.15,1971.43,1971.43,83.49,92.35,97.28,98.65,99.39,99.73,99.81,99.92,99.98,3124.54,26142.29,8760.0,355064.68,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.3,61.58,5394.0 +254,simulated,3B,1996.0,Academic,Los Angeles,CAISO,14000,DEER,0.22,1827354635.82,97.25,8519.0,100.0,1383527.17,1383527.17,99.22,208602.13,214503.42,34511.72,40206.79,0.0,0.0,66.92,76.66,81.22,82.63,85.66,90.45,94.69,98.17,99.65,2249.78,236296.69,8760.0,0.71,401199358.56,100.0,100.0,8760.0,602985.68,602985.68,43.24,45799.01,45799.01,13049.33,13049.33,610.99,610.99,70.3,83.25,98.97,99.49,99.75,99.92,99.98,99.99,99.99,7739.87,77198.12,8760.0,602985.64,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.44,97.25,8519.0 +255,simulated,3B,1996.0,Academic,Los Angeles,CAISO,44000,DEER,0.14,5509536581.87,99.5,8716.0,100.0,3412337.56,3412337.56,77.33,628942.53,632117.55,179090.85,182940.06,0.0,0.0,59.42,69.98,75.96,79.33,83.13,88.4,93.71,98.22,99.73,22269.34,954925.9,8760.0,0.75,788195749.8,100.0,100.0,8760.0,728468.25,728468.25,16.51,89976.68,89976.68,64411.84,64411.84,7760.86,7760.86,53.74,73.15,92.67,98.0,98.86,99.36,99.67,99.79,99.94,17419.47,150770.1,8760.0,670449.98,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.21,99.5,8716.0 +256,simulated,3B,1996.0,Hospital,Los Angeles,CAISO,23000,DEER,0.14,2217998028.93,92.64,8115.0,100.0,1323811.66,1323811.66,57.0,253196.12,273320.77,68075.77,85375.73,0.0,4.79,61.93,71.55,75.72,78.13,81.32,85.88,90.78,95.81,99.3,4411.21,368534.81,8760.0,0.63,318885118.1,100.0,100.0,8760.0,466423.17,466423.17,20.08,36402.41,36402.41,26300.07,26300.07,2703.3,2703.3,61.1,94.66,98.38,99.41,99.62,99.77,99.89,99.95,99.98,5147.49,57383.12,8760.0,363347.33,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.35,92.64,8115.0 +257,simulated,3B,1996.0,Manufacturing,Los Angeles,CAISO,19000,DEER,0.65,1859103010.08,98.48,8627.0,100.0,1664167.62,1664167.62,89.57,212226.37,215498.2,34857.59,37513.79,0.0,0.0,69.9,76.42,81.97,87.51,91.8,95.16,97.79,99.11,99.62,6123.13,294329.26,8760.0,0.12,1205484652.33,100.0,100.0,8760.0,1007942.54,1007942.54,54.25,137612.4,137612.4,36707.8,36707.8,3633.08,3633.08,64.71,74.09,81.84,88.37,93.48,97.04,98.62,99.46,99.84,15693.32,213076.9,8760.0,988179.02,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.61,98.48,8627.0 +258,simulated,3B,1996.0,OfficeLarge,Los Angeles,CAISO,16000,DEER,0.11,2130134503.61,59.85,5243.0,100.0,1219923.34,1219923.34,75.04,243166.04,406281.61,38461.84,273634.78,0.0,1.79,60.06,68.54,74.67,78.13,80.37,83.17,88.29,94.6,99.44,0.0,374452.17,8760.0,0.52,227980817.45,100.0,100.0,8760.0,412302.78,412302.78,25.36,26025.21,26025.21,15448.03,15448.03,1982.0,1982.0,81.93,94.43,97.45,98.63,99.21,99.52,99.75,99.89,99.94,3216.27,28946.82,8760.0,380713.63,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.34,59.85,5243.0 +259,simulated,3B,1996.0,Academic,Riverside,CAISO,14000,DEER,0.22,1912743749.37,96.82,8481.0,100.0,1406438.93,1406438.93,100.86,218349.74,225532.81,35258.36,41786.9,0.0,0.0,66.15,77.51,79.95,81.71,85.33,89.99,94.14,97.66,99.54,2072.24,237135.75,8760.0,0.69,413297748.04,100.0,100.0,8760.0,525440.86,525440.86,37.68,47180.11,47180.11,13081.61,13081.61,609.59,609.59,66.61,78.39,97.34,99.04,99.52,99.74,99.84,99.92,99.98,7679.4,82837.04,8760.0,524909.74,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.37,96.82,8481.0 +260,simulated,3B,1996.0,Academic,Riverside,CAISO,44000,DEER,0.14,5741432072.67,99.6,8725.0,100.0,3380917.36,3380917.36,76.62,655414.62,658043.79,192196.56,194582.98,0.0,0.0,57.88,68.24,74.17,77.88,82.27,87.75,92.89,97.4,99.5,21979.23,1087856.89,8760.0,0.75,788703431.7,100.0,100.0,8760.0,744768.9,744768.9,16.88,90034.64,90034.64,66680.03,66680.03,7504.25,7504.25,52.75,74.71,93.69,98.32,99.13,99.52,99.71,99.86,99.91,17115.31,149861.82,8760.0,632181.58,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.22,99.6,8725.0 +261,simulated,3B,1996.0,Hospital,Riverside,CAISO,23000,DEER,0.14,2473718467.57,92.57,8109.0,100.0,1383657.09,1383657.09,59.57,282387.95,305058.39,76345.01,95288.24,0.0,2.06,60.62,69.42,73.49,75.96,79.38,84.84,90.03,95.05,99.05,4228.31,501286.24,8760.0,0.62,355039832.93,100.0,100.0,8760.0,430464.24,430464.24,18.53,40529.66,40529.66,35193.22,35193.22,2646.14,2646.14,54.78,91.84,97.19,98.86,99.46,99.67,99.76,99.87,99.94,6530.96,59207.29,8760.0,429929.62,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.31,92.57,8109.0 +262,simulated,3B,1996.0,Manufacturing,Riverside,CAISO,19000,DEER,0.58,2157457230.46,98.41,8621.0,100.0,1742256.42,1742256.42,93.77,246285.07,250256.03,39206.98,42404.8,0.0,0.0,67.55,74.5,80.07,85.61,90.07,93.3,96.24,98.63,99.5,6141.16,365078.59,8760.0,0.12,1255997267.29,100.0,100.0,8760.0,1040865.18,1040865.18,56.02,143378.68,143378.68,34990.01,34990.01,3521.6,3521.6,65.27,73.14,80.91,87.9,93.34,96.71,98.54,99.5,99.85,14743.97,233398.71,8760.0,1002126.18,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.6,98.41,8621.0 +263,simulated,3B,1996.0,OfficeLarge,Riverside,CAISO,16000,DEER,0.1,2167554892.72,59.17,5183.0,100.0,1172433.98,1172433.98,72.12,247437.77,418204.69,39342.38,299310.8,0.0,13.96,58.73,67.01,73.14,76.56,79.51,82.5,86.92,92.68,98.71,0.0,400037.22,8760.0,0.57,220315805.89,100.0,100.0,8760.0,418156.33,418156.33,25.72,25150.21,25150.21,15932.3,15932.3,1926.77,1926.77,82.18,95.23,98.05,99.01,99.39,99.63,99.78,99.94,99.97,3227.09,28431.42,8760.0,418156.33,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.36,59.17,5183.0 +264,simulated,3B,1996.0,Academic,Red Bluff,CAISO,14000,DEER,0.28,1794200298.67,95.27,8346.0,100.0,1525928.27,1525928.27,109.43,204817.39,214977.27,23543.89,33129.24,0.0,0.0,70.37,80.46,82.8,84.33,87.32,91.52,95.61,98.95,99.98,1813.5,209637.91,8760.0,0.49,509518686.89,100.0,100.0,8760.0,860641.51,860641.51,61.72,58164.23,58164.23,19908.36,19908.36,609.19,609.19,72.49,94.34,97.36,98.79,99.62,99.86,99.94,99.97,99.99,8624.55,102811.55,8760.0,809588.49,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.56,95.27,8346.0 +265,simulated,3B,1996.0,Academic,Red Bluff,CAISO,44000,DEER,0.2,5489579173.08,99.53,8719.0,100.0,3494168.38,3494168.38,79.19,626664.29,629611.1,145107.72,147665.6,0.0,0.0,61.74,70.92,76.56,79.82,83.58,88.3,93.44,97.16,99.5,16880.0,915252.8,8760.0,0.56,1088505294.1,100.0,100.0,8760.0,1320575.99,1320575.99,29.93,124258.6,124258.6,87486.43,87486.43,7275.44,7275.44,61.36,89.68,95.02,97.31,98.79,99.47,99.69,99.87,99.98,18226.38,179389.29,8760.0,1157024.51,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.38,99.53,8719.0 +266,simulated,3B,1996.0,Hospital,Red Bluff,CAISO,23000,DEER,0.22,2273219394.11,92.85,8134.0,100.0,1445867.03,1445867.03,62.25,259499.93,279471.28,72846.13,87612.06,0.0,0.79,64.2,72.99,76.87,78.88,82.0,87.07,92.68,97.11,99.69,3534.46,352234.1,8760.0,0.51,497703147.71,100.0,100.0,8760.0,582712.87,582712.87,25.09,56815.43,56815.43,50411.74,50411.74,2561.05,2561.05,62.77,89.61,95.25,97.55,98.56,99.2,99.68,99.86,99.94,12289.56,69396.23,8760.0,531718.29,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.4,92.85,8134.0 +267,simulated,3B,1996.0,Manufacturing,Red Bluff,CAISO,19000,DEER,0.87,2386635796.96,98.77,8652.0,100.0,1727002.04,1727002.04,92.95,272447.01,275847.87,28196.93,30062.97,0.0,0.0,67.88,73.81,78.05,82.59,86.87,90.54,93.45,96.15,98.26,5561.0,395147.21,8760.0,0.07,2071494688.88,100.0,100.0,8760.0,1476341.4,1476341.4,79.46,236472.0,236472.0,47342.25,47342.25,3423.34,3423.34,58.14,66.75,74.87,84.37,91.91,96.71,98.76,99.63,99.87,15238.58,444501.28,8760.0,1463820.27,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.85,98.77,8652.0 +268,simulated,3B,1996.0,OfficeLarge,Red Bluff,CAISO,16000,DEER,0.19,2094418986.11,56.61,4959.0,100.0,1294996.4,1294996.4,79.66,239088.93,422347.04,22678.12,291649.23,0.0,20.73,62.75,70.07,76.46,80.24,82.72,85.27,89.37,94.91,98.9,0.0,360238.1,8760.0,0.41,394446564.6,100.0,100.0,8760.0,559383.24,559383.24,34.41,45028.15,45028.15,20924.3,20924.3,1888.18,1888.18,72.74,90.55,94.55,96.54,97.92,99.06,99.51,99.75,99.86,3892.64,61759.91,8760.0,559383.24,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.43,56.61,4959.0 +269,simulated,3B,1996.0,Academic,Stockton,CAISO,14000,DEER,0.37,1368628065.82,95.56,8371.0,100.0,1350316.27,1350316.27,96.84,156236.08,163496.36,9553.65,13461.2,0.0,0.0,73.79,83.09,85.65,87.47,89.62,92.64,95.84,98.47,99.81,1436.1,147063.07,8760.0,0.48,510975010.48,100.0,100.0,8760.0,791001.24,791001.24,56.73,58330.48,58330.48,22012.49,22012.49,610.6,610.6,72.26,93.21,97.31,98.81,99.45,99.74,99.89,99.97,99.99,8922.95,96691.54,8760.0,791001.13,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.59,95.56,8371.0 +270,simulated,3B,1996.0,Academic,Stockton,CAISO,44000,DEER,0.25,4215017533.68,99.39,8707.0,100.0,3223740.9,3223740.9,73.06,481166.39,484095.27,72071.48,73694.14,0.0,0.0,67.02,76.24,81.39,84.38,87.19,90.54,94.25,97.56,99.54,14636.21,581495.53,8760.0,0.55,1042863164.07,100.0,100.0,8760.0,1157770.8,1157770.8,26.24,119048.31,119048.31,74619.96,74619.96,7998.0,7998.0,60.07,86.03,94.21,96.83,98.28,99.14,99.57,99.81,99.94,19003.44,175129.99,8760.0,1068708.82,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.36,99.39,8707.0 +271,simulated,3B,1996.0,Hospital,Stockton,CAISO,23000,DEER,0.27,1731272432.01,90.59,7936.0,100.0,1314146.15,1314146.15,56.58,197633.84,218154.29,28193.14,48274.86,0.0,0.08,69.77,78.09,81.13,83.25,85.62,88.81,92.88,97.17,99.65,2977.16,195567.32,8760.0,0.47,474598371.48,100.0,100.0,8760.0,557942.54,557942.54,24.02,54177.9,54177.9,44058.35,44058.35,2778.35,2778.35,56.75,89.42,95.22,97.35,98.36,99.11,99.55,99.85,99.98,7677.17,68972.87,8760.0,475948.79,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.42,90.59,7936.0 +272,simulated,3B,1996.0,Manufacturing,Stockton,CAISO,19000,DEER,1.44,1557316280.23,98.58,8636.0,100.0,1673034.04,1673034.04,90.04,177775.83,180328.43,11833.78,12334.54,0.0,0.0,77.27,81.75,85.21,88.82,91.95,94.84,97.11,98.58,99.67,5087.27,120491.93,8760.0,0.06,2240250508.99,100.0,100.0,8760.0,1421848.55,1421848.55,76.53,255736.36,255736.36,113229.55,113229.55,3739.24,3739.24,52.11,62.92,73.07,82.52,90.16,95.86,98.66,99.57,99.84,26520.95,452434.63,8760.0,1408724.98,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.85,98.58,8636.0 +273,simulated,3B,1996.0,OfficeLarge,Stockton,CAISO,16000,DEER,0.21,1602142234.74,52.51,4600.0,100.0,1131648.42,1131648.42,69.61,182892.95,348291.79,1592.34,204584.89,0.0,5.07,67.72,74.78,80.17,83.57,85.35,87.26,89.47,93.64,98.78,0.0,230466.96,8760.0,0.35,331197442.53,100.0,100.0,8760.0,541597.38,541597.38,33.32,37807.93,37807.93,17534.89,17534.89,2047.3,2047.3,80.21,91.43,95.07,96.72,98.04,98.93,99.52,99.82,99.92,3640.93,36604.02,8760.0,511743.81,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.48,52.51,4600.0 +274,simulated,3B,1996.0,Academic,Fresno,CAISO,14000,DEER,0.24,1900570486.13,95.94,8404.0,100.0,1472457.91,1472457.91,105.6,216960.1,226150.7,34781.11,44057.44,0.0,0.0,68.09,79.03,81.66,83.24,85.79,90.03,94.28,98.13,99.75,2048.02,227502.35,8760.0,0.54,464409424.42,100.0,100.0,8760.0,792447.53,792447.53,56.83,53014.77,53014.77,19947.76,19947.76,609.86,609.86,73.55,94.89,97.98,99.14,99.65,99.84,99.93,99.97,99.99,8726.18,87749.29,8760.0,792447.5,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.54,95.94,8404.0 +275,simulated,3B,1996.0,Academic,Fresno,CAISO,44000,DEER,0.17,5789178112.03,99.49,8715.0,100.0,3455060.27,3455060.27,78.3,660865.08,664277.47,203813.26,207444.34,0.0,0.0,58.06,69.19,74.79,78.33,82.55,87.25,92.95,97.33,99.54,18438.71,1049774.09,8760.0,0.6,980445078.17,100.0,100.0,8760.0,1043376.35,1043376.35,23.65,111922.95,111922.95,74205.07,74205.07,6986.93,6986.93,58.13,84.9,94.45,96.82,97.99,98.85,99.47,99.78,99.95,17583.93,167043.52,8760.0,1042356.92,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.3,99.49,8715.0 +276,simulated,3B,1996.0,Hospital,Fresno,CAISO,23000,DEER,0.19,2391843148.59,92.99,8146.0,100.0,1415130.64,1415130.64,60.93,273041.46,293621.8,84145.23,101613.48,0.0,2.46,60.75,71.23,75.59,77.8,80.61,85.22,91.23,96.77,99.67,3726.93,398722.21,8760.0,0.51,450025871.57,100.0,100.0,8760.0,531410.55,531410.55,22.88,51372.82,51372.82,44010.82,44010.82,2482.16,2482.16,61.79,88.84,95.49,97.52,98.56,99.08,99.45,99.84,99.98,6822.65,66181.47,8760.0,438158.56,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.38,92.99,8146.0 +277,simulated,3B,1996.0,Manufacturing,Fresno,CAISO,19000,DEER,0.71,2596159436.35,98.8,8655.0,100.0,1825066.15,1825066.15,98.23,296365.23,299960.65,42360.97,45949.24,0.0,0.0,64.78,71.84,76.75,81.87,86.93,90.92,94.29,97.35,99.51,5553.31,477093.79,8760.0,0.07,1840044015.93,100.0,100.0,8760.0,1271252.12,1271252.12,68.42,210050.69,210050.69,34989.62,34989.62,3297.93,3297.93,60.43,67.03,74.03,82.43,89.62,94.61,97.76,99.34,99.79,12323.93,396785.55,8760.0,1256981.35,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.7,98.8,8655.0 +278,simulated,3B,1996.0,OfficeLarge,Fresno,CAISO,16000,DEER,0.15,2140110846.93,57.79,5062.0,100.0,1176452.4,1176452.4,72.37,244304.89,422779.7,28841.28,307903.9,0.0,0.0,59.2,66.96,73.23,77.79,80.39,83.03,86.51,92.47,98.56,0.0,394539.98,8760.0,0.42,318267154.35,100.0,100.0,8760.0,489863.44,489863.44,30.13,36331.87,36331.87,16683.93,16683.93,1823.25,1823.25,77.02,91.71,95.15,96.7,97.76,98.71,99.41,99.7,99.92,3653.83,40951.4,8760.0,489863.44,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.42,57.79,5062.0 +279,simulated,3B,1996.0,Academic,Daggett,CAISO,14000,DEER,0.26,1820726504.48,97.64,8553.0,100.0,1303475.68,1303475.68,93.48,207845.49,212875.78,45595.98,50361.05,0.0,0.0,67.34,78.13,81.27,82.61,84.43,88.07,92.49,96.4,99.42,3133.24,206462.61,8760.0,0.6,469538329.35,100.0,100.0,8760.0,864518.4,864518.4,62.0,53600.27,53600.27,18030.7,18030.7,610.75,610.75,74.68,96.16,98.21,99.09,99.69,99.89,99.97,99.97,99.99,8734.34,89463.58,8760.0,841393.94,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.66,97.64,8553.0 +280,simulated,3B,1996.0,Academic,Daggett,CAISO,44000,DEER,0.19,5664471504.08,99.57,8722.0,100.0,3183684.13,3183684.13,72.15,646629.17,649446.4,227482.81,229749.72,0.0,0.0,56.32,68.76,74.17,77.64,81.68,86.05,91.28,95.99,98.95,30423.56,1016570.18,8760.0,0.69,1053710078.54,100.0,100.0,8760.0,1204068.77,1204068.77,27.29,120286.54,120286.54,83168.0,83168.0,7168.99,7168.99,59.51,88.39,94.81,96.55,98.15,99.22,99.69,99.85,99.91,18119.73,174417.2,8760.0,1099323.12,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.38,99.57,8722.0 +281,simulated,3B,1996.0,Hospital,Daggett,CAISO,23000,DEER,0.19,2315843952.48,95.02,8324.0,100.0,1360072.17,1360072.17,58.56,264365.75,278212.87,82709.74,90353.02,0.0,2.3,61.75,70.98,75.06,77.34,80.23,85.87,92.11,96.97,99.63,5095.79,406141.85,8760.0,0.66,433058845.44,100.0,100.0,8760.0,587902.07,587902.07,25.31,49435.94,49435.94,41855.38,41855.38,2600.58,2600.58,69.63,93.28,96.62,97.79,98.72,99.33,99.78,99.93,99.97,8791.57,64318.11,8760.0,510899.69,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.43,95.02,8324.0 +282,simulated,3B,1996.0,Manufacturing,Daggett,CAISO,19000,DEER,0.8,2380745873.43,99.03,8675.0,100.0,1704424.45,1704424.45,91.73,271774.64,274437.56,43622.82,46255.04,0.0,0.0,65.49,72.29,77.56,82.67,87.29,91.32,94.5,97.23,99.13,6786.51,422133.15,8760.0,0.09,1898318179.62,100.0,100.0,8760.0,1429547.91,1429547.91,76.94,216702.99,216702.99,39841.57,39841.57,3378.15,3378.15,61.29,69.59,76.92,85.16,91.99,95.73,98.54,99.43,99.87,15145.34,393917.69,8760.0,1416290.23,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.84,99.03,8675.0 +283,simulated,3B,1996.0,OfficeLarge,Daggett,CAISO,16000,DEER,0.17,2138911101.68,60.82,5328.0,100.0,1228916.91,1228916.91,75.6,244167.93,401447.28,48827.83,272064.19,0.0,22.07,59.76,67.85,74.74,78.9,81.77,84.67,88.49,93.77,98.7,0.0,373016.12,8760.0,0.55,367472582.56,100.0,100.0,8760.0,548534.02,548534.02,33.74,41948.92,41948.92,20330.57,20330.57,1870.21,1870.21,74.34,92.51,94.82,96.14,97.9,99.0,99.62,99.86,99.94,3869.74,56412.92,8760.0,520294.64,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.45,60.82,5328.0 +284,simulated,2B,1996.0,Academic,El Centro,CAISO,14000,DEER,0.11,3138858040.15,98.6,8637.0,100.0,1789523.81,1789523.81,128.34,358317.13,363419.94,132973.56,137210.93,0.0,0.0,56.26,69.83,71.58,74.44,81.18,88.31,94.19,98.42,99.77,9629.25,734988.4,8760.0,0.87,340187565.79,100.0,100.0,8760.0,407955.61,407955.61,29.26,38834.2,38834.2,12067.76,12067.76,606.83,606.83,64.47,78.06,92.59,99.43,99.83,99.9,99.93,99.99,99.99,6484.68,72811.33,8760.0,407599.65,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.23,98.6,8637.0 +285,simulated,2B,1996.0,Academic,El Centro,CAISO,44000,DEER,0.08,9332287056.05,99.85,8747.0,100.0,4175783.08,4175783.08,94.63,1065329.57,1066912.89,585274.51,586597.53,0.0,0.0,43.2,56.28,61.8,67.96,76.79,86.15,93.52,97.84,99.68,81507.39,2004936.04,8760.0,0.88,776660442.1,100.0,100.0,8760.0,862488.99,862488.99,19.55,88659.87,88659.87,71945.76,71945.76,5486.88,5486.88,55.34,84.59,96.61,99.41,99.78,99.87,99.93,99.98,99.98,14331.23,143070.46,8760.0,688779.48,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.21,99.85,8747.0 +286,simulated,2B,1996.0,Hospital,El Centro,CAISO,23000,DEER,0.08,3831800284.39,95.88,8399.0,100.0,1636498.74,1636498.74,70.46,437420.12,456221.01,183253.12,209919.02,0.0,7.87,47.67,56.39,61.86,65.5,72.69,82.89,90.39,96.12,99.43,43433.86,857047.18,8760.0,0.85,311634143.93,100.0,100.0,8760.0,455010.47,455010.47,19.59,35574.67,35574.67,33634.84,33634.84,2041.66,2041.66,66.44,93.45,98.65,99.79,99.87,99.94,99.98,99.98,99.99,4047.76,53953.86,8760.0,432721.85,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.28,95.88,8399.0 +287,simulated,2B,1996.0,Manufacturing,El Centro,CAISO,19000,DEER,0.15,4805662840.89,99.1,8681.0,100.0,2040931.5,2040931.5,109.85,548591.65,553584.02,375885.88,387626.92,0.0,0.0,43.52,51.3,59.91,69.37,76.93,83.13,88.79,94.01,99.17,16779.61,961325.99,8760.0,0.18,737759186.55,100.0,100.0,8760.0,1167795.75,1167795.75,62.85,84219.09,84219.09,21616.78,21616.78,2618.58,2618.58,81.13,86.67,91.44,94.79,97.72,99.19,99.74,99.94,99.97,5869.92,48381.76,8760.0,1149168.61,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.57,99.1,8681.0 +288,simulated,2B,1996.0,OfficeLarge,El Centro,CAISO,16000,DEER,0.09,3399002171.85,72.16,6321.0,100.0,1441391.42,1441391.42,88.67,388013.95,537731.72,205744.09,475723.38,0.0,11.87,45.78,54.47,62.13,68.69,73.57,79.35,87.15,94.28,99.12,0.0,761065.26,8760.0,0.81,301222590.13,100.0,100.0,8760.0,499026.25,499026.25,30.7,34386.14,34386.14,20645.49,20645.49,1460.08,1460.08,67.05,96.13,99.28,99.73,99.83,99.91,99.97,99.98,99.98,3043.35,65118.64,8760.0,499026.25,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.35,72.16,6321.0 +289,simulated,4B,1996.0,Academic,Bishop,CAISO,14000,DEER,0.78,852315458.72,97.89,8575.0,100.0,1060990.73,1060990.73,76.09,97296.29,99395.39,24668.72,29266.97,0.0,0.0,75.98,88.23,91.23,93.06,94.2,95.71,97.57,99.58,99.98,2347.44,100557.62,8760.0,0.44,660927075.73,100.0,100.0,8760.0,804490.72,804490.72,57.69,75448.3,75448.3,23553.57,23553.57,613.07,613.07,68.77,85.92,92.53,95.42,97.53,98.98,99.67,99.84,99.95,9711.4,139916.64,8760.0,757735.39,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.76,97.89,8575.0 +290,simulated,4B,1996.0,Academic,Bishop,CAISO,44000,DEER,0.48,2865665524.23,99.55,8721.0,100.0,2504646.01,2504646.01,56.76,327130.77,328593.68,123586.36,126829.94,0.0,0.0,63.15,81.86,87.55,90.23,92.21,94.11,95.73,97.75,99.51,22256.15,372221.2,8760.0,0.61,1367495117.86,100.0,100.0,8760.0,1464759.91,1464759.91,33.19,156106.75,156106.75,80790.67,80790.67,8996.46,8996.46,63.45,85.49,90.89,94.71,97.48,98.98,99.67,99.82,99.97,21811.34,207208.72,8760.0,1268260.96,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.58,99.55,8721.0 +291,simulated,4B,1996.0,Hospital,Bishop,CAISO,23000,DEER,0.54,1170421728.43,94.33,8263.0,100.0,1045985.87,1045985.87,45.03,133609.79,141646.1,57367.21,64426.35,0.0,14.16,66.4,80.59,88.22,90.17,92.13,93.56,95.55,97.43,99.78,4647.6,164285.01,8760.0,0.62,626597406.15,100.0,100.0,8760.0,579107.62,579107.62,24.93,71529.38,71529.38,54149.65,54149.65,3090.25,3090.25,51.89,84.58,89.81,92.51,95.43,97.63,99.0,99.74,99.91,13125.54,77659.4,8760.0,511712.67,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.55,94.33,8263.0 +292,simulated,4B,1996.0,Manufacturing,Bishop,CAISO,19000,DEER,3.29,779713476.02,99.05,8677.0,100.0,987528.44,987528.44,53.15,89008.39,89859.8,18537.57,19306.93,0.0,0.0,81.74,86.58,89.87,92.27,94.55,96.26,97.96,99.27,99.91,6355.23,70214.57,8760.0,0.08,2562192779.34,100.0,100.0,8760.0,1327435.71,1327435.71,71.44,292487.76,292487.76,201849.04,201849.04,4165.12,4165.12,44.2,55.37,67.58,77.57,84.73,91.84,96.59,98.97,99.85,30001.3,490070.38,8760.0,1289270.95,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,1.34,99.05,8677.0 +293,simulated,4B,1996.0,OfficeLarge,Bishop,CAISO,16000,DEER,0.47,1101336135.84,54.58,4781.0,100.0,1014541.07,1014541.07,62.41,125723.3,230356.86,12486.4,135720.53,0.0,6.39,68.52,78.81,86.12,90.22,92.21,93.52,95.19,96.61,99.3,0.0,155184.84,8760.0,0.48,516125103.67,100.0,100.0,8760.0,611196.4,611196.4,37.6,58918.39,58918.39,21699.0,21699.0,2261.05,2261.05,76.27,85.8,89.09,92.45,95.08,97.88,99.29,99.59,99.91,5164.97,56916.34,8760.0,578230.42,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.6,54.58,4781.0 +294,simulated,4C,2020.0,Academic,Eureka,CAISO,14000,DEER,5.2,121406011.71,86.13,7545.0,100.0,628671.45,628671.45,45.09,13859.13,16090.92,4144.72,5026.36,0.0,0.0,94.41,98.03,99.25,99.62,99.85,99.92,99.95,99.97,99.97,1.38,8366.48,8760.0,0.16,631332724.38,100.0,100.0,8760.0,572589.29,572589.29,41.06,72069.95,72069.95,17406.53,17406.53,613.58,613.58,61.61,69.95,89.36,94.76,97.47,98.86,99.44,99.78,99.91,9413.52,152595.7,8760.0,570526.09,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.91,86.13,7545.0 +295,simulated,4C,2020.0,Academic,Eureka,CAISO,44000,DEER,2.62,465540891.22,98.45,8624.0,100.0,1566461.25,1566461.25,35.5,53143.94,53982.01,18240.19,19184.54,0.0,0.0,91.56,96.22,98.66,99.28,99.63,99.87,99.95,99.95,99.97,8308.16,43620.59,8760.0,0.28,1218100938.09,100.0,100.0,8760.0,951640.6,951640.6,21.57,139052.62,139052.62,104595.7,104595.7,9752.82,9752.82,48.01,67.75,88.04,94.25,97.18,98.65,99.32,99.76,99.92,21348.77,207424.2,8760.0,764913.59,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.61,98.45,8624.0 +296,simulated,4C,2020.0,Hospital,Eureka,CAISO,23000,DEER,3.5,135644951.01,85.89,7524.0,100.0,725006.83,725006.83,31.21,15484.58,18028.3,2847.83,3290.38,0.0,0.73,94.63,97.91,99.02,99.49,99.74,99.91,99.95,99.95,99.97,1325.66,5035.02,8760.0,0.19,474954309.9,100.0,100.0,8760.0,429007.76,429007.76,18.47,54218.53,54218.53,47437.72,47437.72,3335.52,3335.52,46.18,85.57,93.98,97.32,98.72,99.41,99.7,99.86,99.93,16819.44,73817.2,8760.0,429007.76,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.59,85.89,7524.0 +297,simulated,4C,2020.0,Manufacturing,Eureka,CAISO,19000,DEER,36.67,99143047.99,97.71,8559.0,100.0,768199.53,768199.53,41.35,11317.7,11583.48,5092.73,5187.2,0.0,0.0,98.57,99.75,99.89,99.93,99.95,99.95,99.95,99.98,99.98,3674.66,10394.26,8760.0,0.03,3635652610.97,100.0,100.0,8760.0,1290092.71,1290092.71,69.43,415028.84,415028.84,381049.61,381049.61,5429.5,5429.5,10.74,25.92,51.32,69.19,82.71,92.2,97.1,98.94,99.71,252426.08,569491.09,8760.0,1276046.05,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,1.68,97.71,8559.0 +298,simulated,4C,2020.0,OfficeLarge,Eureka,CAISO,16000,DEER,2.93,92847773.04,22.58,1978.0,100.0,595479.35,595479.35,36.63,10599.06,46940.23,0.0,20586.24,0.0,7.32,93.4,97.74,99.04,99.52,99.73,99.9,99.93,99.95,99.95,0.0,0.0,8760.0,0.16,271726411.2,100.0,100.0,8760.0,418146.13,418146.13,25.72,31019.0,31019.0,18726.53,18726.53,2412.35,2412.35,82.15,91.62,95.64,97.16,98.37,99.19,99.68,99.82,99.94,3759.34,33363.16,8760.0,415200.32,29.81,10.86,11.35,-1.99,5.82,7.63,8.3,9.03,10.35,11.35,12.06,12.84,13.3,13.9,15.46,0.7,22.58,1978.0 +299,simulated,3C,2020.0,Academic,Napa,CAISO,14000,DEER,0.83,749863163.74,92.97,8144.0,100.0,1107156.18,1107156.18,79.4,85600.82,92075.54,4215.39,5213.72,0.0,0.0,82.16,88.22,90.19,91.59,93.62,96.53,98.66,99.52,99.93,53.82,56097.41,8760.0,0.36,621073601.38,100.0,100.0,8760.0,765609.07,765609.07,54.91,70898.81,70898.81,25342.19,25342.19,612.54,612.54,66.16,86.27,94.66,97.32,98.61,99.28,99.65,99.85,99.97,9234.55,138317.47,8760.0,765609.0,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.69,92.97,8144.0 +300,simulated,3C,2020.0,Academic,Napa,CAISO,44000,DEER,0.47,2253055505.08,99.33,8701.0,100.0,2415500.29,2415500.29,54.74,257198.12,258942.13,37427.18,37900.35,0.0,0.0,74.89,83.62,87.37,89.79,91.82,94.65,96.93,98.92,99.79,12174.1,243270.08,8760.0,0.5,1051546596.4,100.0,100.0,8760.0,996426.04,996426.04,22.58,120039.57,120039.57,83162.78,83162.78,8891.63,8891.63,55.54,79.5,93.33,96.32,97.98,99.0,99.5,99.81,99.9,19746.31,183788.95,8760.0,810806.65,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.41,99.33,8701.0 +301,simulated,3C,2020.0,Hospital,Napa,CAISO,23000,DEER,0.6,1045307127.55,82.88,7260.0,100.0,1249249.63,1249249.63,53.79,119327.3,143981.7,4124.52,13289.76,0.0,0.42,79.42,84.93,87.66,89.65,91.83,94.82,97.75,99.39,99.94,968.49,90590.61,8760.0,0.32,628584305.03,100.0,100.0,8760.0,609196.3,609196.3,26.23,71756.2,71756.2,62880.57,62880.57,3088.37,3088.37,47.08,84.6,92.92,96.61,98.33,99.16,99.63,99.85,99.92,23397.79,84926.19,8760.0,593638.33,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.49,82.88,7260.0 +302,simulated,3C,2020.0,Manufacturing,Napa,CAISO,19000,DEER,3.61,783410631.37,97.89,8575.0,100.0,1377827.74,1377827.74,74.16,89430.44,91359.84,8236.1,8720.79,0.0,0.0,85.29,88.9,91.6,94.11,96.22,97.89,99.08,99.62,99.9,4263.19,48441.53,8760.0,0.05,2828173278.1,100.0,100.0,8760.0,1445687.17,1445687.17,77.81,322850.83,322850.83,283744.66,283744.66,4379.28,4379.28,35.08,50.68,68.79,80.53,90.14,95.94,98.53,99.59,99.9,45644.85,506373.01,8760.0,1433071.39,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,1.05,97.89,8575.0 +303,simulated,3C,2020.0,OfficeLarge,Napa,CAISO,16000,DEER,0.31,814880342.21,44.87,3931.0,100.0,910230.07,910230.07,55.99,93022.87,207295.94,0.0,96755.55,0.0,9.46,77.0,84.52,87.52,89.06,90.06,91.76,95.96,99.1,99.84,0.0,73120.57,8760.0,0.43,255142499.72,100.0,100.0,8760.0,425146.65,425146.65,26.15,29125.86,29125.86,17147.31,17147.31,2234.71,2234.71,84.1,92.67,96.1,97.04,98.18,99.26,99.71,99.84,99.91,3531.03,30466.37,8760.0,420586.55,37.97,13.7,12.45,-3.52,5.7,8.01,9.11,10.0,11.27,12.45,13.94,16.06,17.47,19.19,23.94,0.47,44.87,3931.0 +304,simulated,3C,2020.0,Academic,Oakland,CAISO,14000,DEER,1.35,387678253.13,93.15,8160.0,100.0,867906.65,867906.65,62.24,44255.51,47509.59,3558.43,4652.8,0.0,0.0,84.46,92.08,95.67,97.47,98.23,98.74,99.34,99.7,99.89,85.86,33552.98,8760.0,0.37,524586112.46,100.0,100.0,8760.0,706221.68,706221.68,50.65,59884.26,59884.26,21256.25,21256.25,611.97,611.97,69.36,81.63,96.6,98.45,99.41,99.71,99.9,99.97,99.98,8775.98,111736.06,8760.0,706221.6,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.81,93.15,8160.0 +305,simulated,3C,2020.0,Academic,Oakland,CAISO,44000,DEER,0.65,1330636272.07,98.97,8670.0,100.0,2044353.75,2044353.75,46.33,151899.12,153475.93,33896.56,34493.57,0.0,0.0,78.88,88.16,92.99,95.74,97.5,98.37,99.09,99.6,99.91,10791.08,148325.39,8760.0,0.53,870403800.99,100.0,100.0,8760.0,755784.25,755784.25,17.13,99361.16,99361.16,71907.95,71907.95,8934.0,8934.0,53.13,72.55,88.93,97.08,98.36,99.24,99.68,99.87,99.93,19598.82,170711.76,8760.0,600384.74,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.37,98.97,8670.0 +306,simulated,3C,2020.0,Hospital,Oakland,CAISO,23000,DEER,0.91,547125934.21,82.89,7261.0,100.0,995051.15,995051.15,42.84,62457.3,75351.32,3721.1,6791.69,0.0,0.01,82.42,90.26,94.17,96.02,97.42,98.09,98.69,99.41,99.77,927.5,58176.13,8760.0,0.29,499868282.57,100.0,100.0,8760.0,521174.2,521174.2,22.44,57062.59,57062.59,53570.1,53570.1,3118.2,3118.2,49.49,87.63,94.69,97.91,99.06,99.53,99.81,99.9,99.98,19893.09,70176.91,8760.0,490604.67,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.52,82.89,7261.0 +307,simulated,3C,2020.0,Manufacturing,Oakland,CAISO,19000,DEER,6.62,332833724.29,97.58,8548.0,100.0,1153741.31,1153741.31,62.1,37994.72,38937.03,7152.33,7681.57,0.0,0.0,92.66,96.26,97.81,98.73,99.21,99.57,99.77,99.92,99.97,4312.06,27623.96,8760.0,0.06,2203899919.28,100.0,100.0,8760.0,1098134.57,1098134.57,59.1,251586.75,251586.75,203399.16,203399.16,4220.43,4220.43,34.05,52.71,68.2,79.24,88.92,95.05,97.97,99.38,99.79,45303.49,397523.33,8760.0,1082205.7,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.95,97.58,8548.0 +308,simulated,3C,2020.0,OfficeLarge,Oakland,CAISO,16000,DEER,0.42,420300891.95,45.07,3948.0,100.0,703360.58,703360.58,43.27,47979.55,106459.19,0.0,53475.2,0.0,7.57,80.38,88.33,92.97,95.39,96.82,97.71,98.18,98.81,99.63,0.0,39634.62,8760.0,0.33,178487386.63,100.0,100.0,8760.0,397729.24,397729.24,24.47,20375.27,20375.27,12270.17,12270.17,2240.62,2240.62,90.55,96.27,98.26,98.96,99.41,99.68,99.86,99.93,99.98,3358.88,24169.77,8760.0,397729.24,34.75,14.17,14.11,0.81,8.58,10.42,11.1,11.99,13.26,14.11,15.0,16.1,16.74,17.58,19.75,0.57,45.07,3948.0 +309,simulated,3C,2020.0,Academic,San Jose,CAISO,14000,DEER,0.5,1140009873.67,94.67,8293.0,100.0,1303987.41,1303987.41,93.52,130138.11,137466.52,7593.12,9905.26,0.0,0.0,78.11,84.6,86.38,88.18,91.77,95.16,97.91,99.53,99.98,569.05,98766.46,8760.0,0.44,569733173.22,100.0,100.0,8760.0,775746.56,775746.56,55.63,65038.03,65038.03,23100.29,23100.29,611.71,611.71,68.39,89.05,95.86,97.77,99.03,99.6,99.78,99.91,99.98,9065.81,125311.77,8760.0,775746.56,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.59,94.67,8293.0 +310,simulated,3C,2020.0,Academic,San Jose,CAISO,44000,DEER,0.31,3201863729.13,99.46,8713.0,100.0,2540998.94,2540998.94,57.58,365509.56,367481.2,54735.95,55586.2,0.0,0.0,67.74,77.85,82.18,84.89,87.63,91.37,95.24,97.74,99.51,15745.84,394545.82,8760.0,0.58,983041451.54,100.0,100.0,8760.0,1033273.64,1033273.64,23.42,112219.34,112219.34,77013.21,77013.21,8208.98,8208.98,58.37,83.32,94.5,96.84,98.39,99.27,99.75,99.87,99.94,18728.53,171533.11,8760.0,701036.07,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.41,99.46,8713.0 +311,simulated,3C,2020.0,Hospital,San Jose,CAISO,23000,DEER,0.38,1554986546.14,86.42,7570.0,100.0,1352322.98,1352322.98,58.22,177509.88,205414.34,16952.02,47430.79,0.0,1.86,73.4,79.32,82.4,84.54,87.92,92.09,96.12,98.85,99.84,1705.59,162102.06,8760.0,0.4,585917821.61,100.0,100.0,8760.0,626691.3,626691.3,26.98,66885.6,66885.6,58116.47,58116.47,2856.79,2856.79,58.14,87.71,94.41,96.95,98.48,99.26,99.68,99.92,99.99,21286.88,79005.29,8760.0,608567.61,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.46,86.42,7570.0 +312,simulated,3C,2020.0,Manufacturing,San Jose,CAISO,19000,DEER,1.76,1358752166.28,98.26,8608.0,100.0,1511025.49,1511025.49,81.33,155108.69,157847.6,11133.83,11632.02,0.0,0.0,78.41,82.63,85.99,89.49,92.51,94.9,96.74,98.23,99.47,4646.27,89169.94,8760.0,0.07,2396375555.71,100.0,100.0,8760.0,1378015.44,1378015.44,74.17,273558.85,273558.85,180842.04,180842.04,3884.09,3884.09,46.15,59.03,71.18,81.63,89.9,94.74,97.75,99.42,99.73,32435.17,462107.43,8760.0,1290766.96,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.91,98.26,8608.0 +313,simulated,3C,2020.0,OfficeLarge,San Jose,CAISO,16000,DEER,0.22,1167125272.23,51.74,4532.0,100.0,945711.95,945711.95,58.18,133233.48,257529.85,178.69,130294.22,0.0,5.19,70.33,78.65,82.44,84.06,85.59,88.36,93.13,97.75,99.66,0.0,141325.47,8760.0,0.52,256463170.04,100.0,100.0,8760.0,429883.45,429883.45,26.44,29276.62,29276.62,17266.39,17266.39,2093.78,2093.78,82.25,93.44,96.0,96.8,98.41,99.51,99.83,99.92,99.94,3388.07,30466.49,8760.0,426136.22,42.55,15.35,13.76,-4.4,5.36,8.26,9.36,10.25,12.09,13.76,16.06,18.73,20.36,22.37,28.3,0.45,51.74,4532.0 +314,simulated,3C,2020.0,Academic,Santa Maria,CAISO,14000,DEER,1.09,488862249.03,94.83,8307.0,100.0,922356.96,922356.96,66.15,55806.19,58849.43,4127.29,4728.75,0.0,0.0,82.89,90.25,93.96,96.19,97.2,98.22,99.05,99.73,99.92,203.63,46566.42,8760.0,0.41,533484441.82,100.0,100.0,8760.0,682015.37,682015.37,48.91,60900.05,60900.05,15401.85,15401.85,612.74,612.74,66.83,75.86,96.48,98.49,99.29,99.69,99.82,99.92,99.98,8686.15,126783.71,8760.0,682015.26,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.74,94.83,8307.0 +315,simulated,3C,2020.0,Academic,Santa Maria,CAISO,44000,DEER,0.55,1634722323.3,99.08,8679.0,100.0,1997266.0,1997266.0,45.26,186612.14,188353.76,35710.61,36381.98,0.0,0.0,74.62,84.29,89.53,93.08,95.5,97.12,98.33,99.3,99.85,11503.18,205058.72,8760.0,0.57,906103834.45,100.0,100.0,8760.0,855066.34,855066.34,19.38,103436.51,103436.51,75802.14,75802.14,9083.14,9083.14,55.86,73.92,92.88,97.56,98.74,99.44,99.79,99.92,99.95,19779.5,174340.25,8760.0,565830.17,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.43,99.08,8679.0 +316,simulated,3C,2020.0,Hospital,Santa Maria,CAISO,23000,DEER,0.74,686684372.86,83.74,7336.0,100.0,1084782.81,1084782.81,46.7,78388.63,93604.74,4065.48,7073.5,0.0,0.24,79.97,87.72,91.97,95.42,96.5,97.57,98.79,99.44,99.85,1069.37,75151.51,8760.0,0.35,505487086.45,100.0,100.0,8760.0,537973.88,537973.88,23.16,57704.01,57704.01,56327.37,56327.37,3246.24,3246.24,48.3,89.71,96.19,98.14,99.11,99.59,99.84,99.95,99.98,22564.82,69747.32,8760.0,514474.46,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.5,83.74,7336.0 +317,simulated,3C,2020.0,Manufacturing,Santa Maria,CAISO,19000,DEER,5.54,422649160.5,97.5,8541.0,100.0,1108387.58,1108387.58,59.65,48247.62,49484.74,7081.87,7600.52,0.0,0.0,89.03,94.0,96.51,97.89,98.74,99.36,99.62,99.69,99.91,4235.87,37922.23,8760.0,0.06,2341149230.75,100.0,100.0,8760.0,1211194.26,1211194.26,65.19,267254.48,267254.48,232723.68,232723.68,4510.23,4510.23,34.71,51.39,68.85,83.0,91.06,96.07,98.45,99.54,99.87,46960.09,407858.02,8760.0,1125865.23,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,1.09,97.5,8541.0 +318,simulated,3C,2020.0,OfficeLarge,Santa Maria,CAISO,16000,DEER,0.34,529606985.27,44.67,3913.0,100.0,767861.87,767861.87,47.24,60457.42,135345.51,0.0,75546.07,0.0,5.92,77.88,86.34,91.0,94.42,96.04,96.63,97.33,98.81,99.65,0.0,56384.88,8760.0,0.43,179867329.91,100.0,100.0,8760.0,416439.34,416439.34,25.62,20532.8,20532.8,12856.54,12856.54,2269.48,2269.48,91.64,96.64,98.16,98.81,99.41,99.79,99.91,99.95,99.98,3388.51,24215.61,8760.0,416439.34,37.2,13.98,13.47,-1.32,7.76,10.0,10.6,11.28,12.45,13.47,14.55,16.24,17.18,18.27,20.99,0.54,44.67,3913.0 +319,simulated,3B,2020.0,Academic,Los Angeles,CAISO,14000,DEER,0.36,1077338033.28,96.72,8473.0,100.0,1030508.47,1030508.47,73.9,122983.79,127149.54,17086.92,21593.07,0.0,0.0,70.71,80.67,86.24,89.06,91.06,93.58,96.68,98.94,99.68,1946.22,137944.17,8760.0,0.68,392463535.6,100.0,100.0,8760.0,388922.08,388922.08,27.89,44801.77,44801.77,13044.59,13044.59,611.51,611.51,64.61,76.13,80.27,98.84,99.32,99.65,99.84,99.94,99.97,7815.6,74580.6,8760.0,388922.01,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.38,96.72,8473.0 +320,simulated,3B,2020.0,Academic,Los Angeles,CAISO,44000,DEER,0.2,3261644471.08,99.66,8730.0,100.0,2504731.37,2504731.37,56.76,372333.84,373613.34,122883.81,123885.75,0.0,0.0,60.63,74.89,82.55,86.4,89.97,93.62,97.05,99.08,99.76,25074.07,505355.28,8760.0,0.81,659661870.84,100.0,100.0,8760.0,388227.91,388227.91,8.8,75303.87,75303.87,51484.42,51484.42,8199.39,8199.39,44.89,65.05,74.82,81.18,91.59,96.64,99.75,99.89,99.98,17972.97,117529.53,8760.0,378349.0,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.15,99.66,8730.0 +321,simulated,3B,2020.0,Hospital,Los Angeles,CAISO,23000,DEER,0.22,1411085616.69,92.18,8075.0,100.0,1159762.74,1159762.74,49.93,161082.83,174747.44,55590.57,69268.1,0.0,0.99,64.49,78.28,84.11,87.39,90.64,93.58,96.16,98.32,99.57,3606.85,191351.07,8760.0,0.59,307628701.23,100.0,100.0,8760.0,334902.5,334902.5,14.42,35117.43,35117.43,25720.8,25720.8,2841.76,2841.76,55.35,92.72,97.27,98.89,99.47,99.77,99.9,99.94,99.98,7589.69,58742.85,8760.0,334902.5,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.29,92.18,8075.0 +322,simulated,3B,2020.0,Manufacturing,Los Angeles,CAISO,19000,DEER,1.23,859729696.59,98.03,8587.0,100.0,1222614.34,1222614.34,65.8,98142.66,100119.91,23746.45,25874.98,0.0,0.0,77.71,86.24,91.0,95.32,97.88,99.08,99.68,99.92,99.94,5533.71,99582.29,8760.0,0.13,1058675022.82,100.0,100.0,8760.0,767040.34,767040.34,41.28,120853.31,120853.31,38460.54,38460.54,3823.89,3823.89,58.23,68.34,78.49,87.32,93.03,96.63,98.6,99.51,99.92,17383.72,203354.29,8760.0,767040.29,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.63,98.03,8587.0 +323,simulated,3B,2020.0,OfficeLarge,Los Angeles,CAISO,16000,DEER,0.12,1093363825.52,60.75,5322.0,100.0,843883.61,843883.61,51.91,124813.22,205442.28,19533.38,112674.3,0.0,7.62,64.49,76.94,83.65,86.22,88.2,89.61,91.95,97.12,99.44,0.0,150792.76,8760.0,0.65,131661986.65,100.0,100.0,8760.0,280211.34,280211.34,17.24,15029.91,15029.91,9706.51,9706.51,2075.61,2075.61,88.34,96.16,98.61,99.67,99.81,99.85,99.91,99.93,99.95,3083.29,20413.07,8760.0,280211.34,37.8,17.29,17.34,5.25,12.16,13.55,14.19,14.9,16.1,17.34,18.38,19.4,19.93,20.66,22.45,0.33,60.75,5322.0 +324,simulated,3B,2020.0,Academic,San Diego,CAISO,14000,DEER,0.35,1159101688.81,96.87,8486.0,100.0,1105199.12,1105199.12,79.26,132317.54,136589.88,20785.11,24652.92,0.0,0.0,72.02,82.09,84.94,86.97,90.32,94.16,97.29,99.13,99.67,2390.61,132878.93,8760.0,0.7,400237924.21,100.0,100.0,8760.0,332183.27,332183.27,23.82,45689.26,45689.26,13041.18,13041.18,610.81,610.81,61.55,71.46,79.06,89.53,99.06,99.53,99.69,99.87,99.92,7722.39,78182.15,8760.0,332183.24,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.3,96.87,8486.0 +325,simulated,3B,2020.0,Academic,San Diego,CAISO,44000,DEER,0.2,3469471859.27,99.74,8737.0,100.0,2353269.77,2353269.77,53.33,396058.43,397101.05,139905.95,140882.89,0.0,0.0,58.5,73.22,79.63,82.91,86.51,91.19,95.76,98.24,99.47,25284.27,516858.25,8760.0,0.83,685345628.91,100.0,100.0,8760.0,387521.79,387521.79,8.78,78235.8,78235.8,53500.0,53500.0,8023.26,8023.26,43.58,61.07,71.28,80.81,92.41,97.07,99.81,99.89,99.98,17721.04,128229.53,8760.0,377183.7,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.16,99.74,8737.0 +326,simulated,3B,2020.0,Hospital,San Diego,CAISO,23000,DEER,0.2,1491382104.18,93.46,8187.0,100.0,1123639.23,1123639.23,48.38,170249.1,182164.66,62579.55,73779.19,0.0,0.96,62.32,76.24,81.46,85.95,89.58,92.56,95.76,98.31,99.55,4455.85,205366.51,8760.0,0.63,294132586.8,100.0,100.0,8760.0,309210.33,309210.33,13.31,33576.78,33576.78,27114.52,27114.52,2785.56,2785.56,53.08,84.58,97.81,99.13,99.6,99.85,99.94,99.98,99.99,7101.26,57030.36,8760.0,309210.33,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.28,93.46,8187.0 +327,simulated,3B,2020.0,Manufacturing,San Diego,CAISO,19000,DEER,1.05,924698912.79,98.05,8589.0,100.0,1206871.73,1206871.73,64.96,105559.24,107660.84,28642.83,30816.55,0.0,0.0,76.78,84.37,89.77,94.33,97.43,98.65,99.37,99.79,99.94,5558.3,105668.52,8760.0,0.15,970438610.05,100.0,100.0,8760.0,744188.27,744188.27,40.05,110780.66,110780.66,36641.51,36641.51,3746.4,3746.4,61.77,71.5,80.14,87.4,93.42,96.88,98.7,99.46,99.77,17046.71,177420.7,8760.0,744187.54,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.62,98.05,8589.0 +328,simulated,3B,2020.0,OfficeLarge,San Diego,CAISO,16000,DEER,0.11,1192936653.47,62.82,5503.0,100.0,799157.51,799157.51,49.16,136179.98,216779.33,25849.11,109493.1,0.0,9.2,63.22,74.89,79.87,81.29,82.76,86.02,91.86,97.26,99.38,0.0,160792.0,8760.0,0.72,135924467.15,100.0,100.0,8760.0,196246.63,196246.63,12.07,15516.49,15516.49,10073.22,10073.22,2038.06,2038.06,70.86,93.28,95.71,98.0,99.69,99.95,99.98,99.98,99.99,3079.8,21057.41,8760.0,196246.63,37.55,17.69,17.8,5.0,12.34,14.07,14.75,15.6,16.7,17.8,18.9,20.0,20.35,20.94,22.8,0.25,62.82,5503.0 +329,simulated,3B,2020.0,Academic,Long Beach,CAISO,14000,DEER,0.26,1572475146.46,96.78,8478.0,100.0,1337965.84,1337965.84,95.95,179506.3,185477.13,33203.62,40256.58,0.0,0.0,68.9,78.96,81.47,84.22,88.84,93.41,97.05,99.26,99.84,2136.88,188216.47,8760.0,0.71,406626481.97,100.0,100.0,8760.0,527924.14,527924.14,37.86,46418.55,46418.55,12916.88,12916.88,610.12,610.12,66.88,79.12,98.05,99.17,99.57,99.81,99.93,99.99,99.99,7598.13,78561.96,8760.0,527924.13,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.39,96.78,8478.0 +330,simulated,3B,2020.0,Academic,Long Beach,CAISO,44000,DEER,0.16,4436748803.73,99.74,8737.0,100.0,2756536.5,2756536.5,62.47,506478.17,507811.47,183720.87,186036.88,0.0,0.0,56.5,69.41,76.08,80.0,84.6,90.05,94.74,98.38,99.79,26871.2,755585.71,8760.0,0.8,696357281.93,100.0,100.0,8760.0,622747.84,622747.84,14.11,79492.84,79492.84,57379.55,57379.55,7717.32,7717.32,51.38,74.28,90.81,98.26,99.62,99.83,99.94,99.97,99.98,17178.5,127055.19,8760.0,451781.29,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.23,99.74,8737.0 +331,simulated,3B,2020.0,Hospital,Long Beach,CAISO,23000,DEER,0.16,2126605769.02,91.92,8052.0,100.0,1246655.36,1246655.36,53.67,242763.22,264109.01,78383.27,97292.97,0.0,0.48,58.97,70.98,75.43,78.36,81.97,86.28,90.87,95.88,99.28,3687.76,363412.69,8760.0,0.58,341290276.03,100.0,100.0,8760.0,352679.36,352679.36,15.18,38960.08,38960.08,34163.43,34163.43,2689.6,2689.6,51.12,89.59,96.04,98.15,99.02,99.58,99.83,99.92,99.99,6787.51,58810.62,8760.0,352679.36,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.28,91.92,8052.0 +332,simulated,3B,2020.0,Manufacturing,Long Beach,CAISO,19000,DEER,0.72,1567821019.65,98.03,8587.0,100.0,1558931.6,1558931.6,83.9,178975.0,182580.76,37946.51,40937.12,0.0,0.0,70.9,78.58,84.49,89.47,94.06,97.16,98.66,99.52,99.81,5635.01,227181.58,8760.0,0.13,1126912587.13,100.0,100.0,8760.0,1009259.93,1009259.93,54.32,128642.99,128642.99,34238.18,34238.18,3614.28,3614.28,66.13,74.83,83.29,89.67,94.44,97.64,99.42,99.91,99.95,14724.01,204394.03,8760.0,920356.35,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.65,98.03,8587.0 +333,simulated,3B,2020.0,OfficeLarge,Long Beach,CAISO,16000,DEER,0.1,1545521280.35,61.71,5406.0,100.0,851062.39,851062.39,52.35,176429.37,285889.99,31549.71,166477.44,0.0,21.88,59.0,69.47,74.89,77.17,78.84,81.63,86.78,92.99,98.55,0.0,259419.0,8760.0,0.68,152196868.85,100.0,100.0,8760.0,303573.85,303573.85,18.67,17374.07,17374.07,10493.53,10493.53,1971.19,1971.19,87.57,94.09,98.76,99.55,99.73,99.82,99.9,99.97,99.98,3060.52,21683.13,8760.0,303573.85,42.2,18.48,18.42,1.21,10.81,13.01,14.0,15.0,16.91,18.42,19.83,21.24,22.17,23.42,26.58,0.36,61.71,5406.0 +334,simulated,3B,2020.0,Academic,Los Angeles,CAISO,14000,DEER,0.29,1477028545.09,96.37,8442.0,100.0,1269960.94,1269960.94,91.08,168610.56,174961.92,24403.23,30902.18,0.0,0.0,70.14,79.69,81.7,83.97,88.52,93.12,96.82,99.03,99.86,1668.87,170896.01,8760.0,0.65,428662732.03,100.0,100.0,8760.0,665539.48,665539.48,47.73,48934.1,48934.1,13189.31,13189.31,610.9,610.9,69.78,89.67,98.58,99.34,99.7,99.87,99.95,99.98,99.99,7799.96,83562.14,8760.0,665539.47,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.52,96.37,8442.0 +335,simulated,3B,2020.0,Academic,Los Angeles,CAISO,44000,DEER,0.17,4164141468.94,99.68,8732.0,100.0,2686555.48,2686555.48,60.88,475358.62,476882.9,143408.85,145431.96,0.0,0.0,59.11,71.44,76.62,80.03,84.83,90.13,94.99,98.48,99.61,23257.45,696616.78,8760.0,0.76,727767312.92,100.0,100.0,8760.0,607737.63,607737.63,13.77,83078.46,83078.46,61935.6,61935.6,7760.93,7760.93,49.66,71.75,88.63,96.93,99.06,99.5,99.77,99.91,99.94,17302.08,133557.48,8760.0,511009.37,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.23,99.68,8732.0 +336,simulated,3B,2020.0,Hospital,Los Angeles,CAISO,23000,DEER,0.19,2023827923.14,90.72,7947.0,100.0,1250861.47,1250861.47,53.85,231030.58,254665.65,60601.36,81837.01,0.0,3.5,62.6,71.85,76.06,78.66,82.55,87.26,91.85,96.26,99.29,3116.74,338640.86,8760.0,0.53,377373045.28,100.0,100.0,8760.0,486058.36,486058.36,20.93,43079.11,43079.11,37505.03,37505.03,2703.23,2703.23,56.86,93.13,97.34,98.86,99.5,99.62,99.84,99.92,99.98,8920.48,60625.4,8760.0,434529.49,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.39,90.72,7947.0 +337,simulated,3B,2020.0,Manufacturing,Los Angeles,CAISO,19000,DEER,0.78,1585626851.6,98.13,8596.0,100.0,1552614.86,1552614.86,83.56,181007.63,184461.01,30655.07,33565.45,0.0,0.0,71.31,78.37,84.22,89.2,93.11,96.15,98.32,99.3,99.7,5441.9,228252.72,8760.0,0.11,1230924601.46,100.0,100.0,8760.0,982216.68,982216.68,52.86,140516.51,140516.51,37263.96,37263.96,3633.08,3633.08,62.96,72.27,80.53,87.63,92.91,96.79,98.54,99.45,99.86,16411.08,225270.09,8760.0,941762.06,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.63,98.13,8596.0 +338,simulated,3B,2020.0,OfficeLarge,Los Angeles,CAISO,16000,DEER,0.12,1475911461.47,59.93,5250.0,100.0,855408.06,855408.06,52.62,168483.04,281125.99,20296.05,157016.0,0.0,17.46,62.18,71.2,75.47,77.4,79.16,82.35,87.83,94.02,98.93,0.0,239002.1,8760.0,0.66,173245779.37,100.0,100.0,8760.0,334386.57,334386.57,20.57,19776.92,19776.92,11245.33,11245.33,1981.79,1981.79,86.36,93.16,98.53,99.3,99.54,99.66,99.81,99.87,99.97,3089.05,23387.3,8760.0,334386.57,43.44,18.21,17.7,1.17,10.0,12.27,13.26,14.36,16.1,17.7,19.36,21.35,22.45,23.76,27.45,0.39,59.93,5250.0 +339,simulated,3B,2020.0,Academic,Riverside,CAISO,14000,DEER,0.26,1642607404.74,96.29,8435.0,100.0,1300419.81,1300419.81,93.26,187512.26,194737.1,30109.37,35583.35,0.0,0.0,68.53,77.98,80.35,82.74,87.32,91.67,95.4,98.38,99.7,1622.15,193258.16,8760.0,0.65,428198034.61,100.0,100.0,8760.0,564445.95,564445.95,40.48,48881.05,48881.05,13149.62,13149.62,609.57,609.57,66.74,78.76,97.37,98.86,99.46,99.66,99.83,99.91,99.98,7698.17,85751.89,8760.0,563672.33,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.43,96.29,8435.0 +340,simulated,3B,2020.0,Academic,Riverside,CAISO,44000,DEER,0.16,4595999312.91,99.69,8733.0,100.0,2814942.37,2814942.37,63.79,524657.46,526279.55,164936.94,167202.59,0.0,0.0,57.55,69.38,74.84,78.86,83.92,89.47,94.37,97.81,99.6,24850.61,854049.86,8760.0,0.76,731540162.03,100.0,100.0,8760.0,662485.16,662485.16,15.01,83509.15,83509.15,65067.72,65067.72,7504.28,7504.28,50.51,74.59,90.73,98.5,99.32,99.58,99.84,99.89,99.93,17020.28,134120.8,8760.0,474786.15,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.24,99.69,8733.0 +341,simulated,3B,2020.0,Hospital,Riverside,CAISO,23000,DEER,0.17,2245485041.98,91.37,8004.0,100.0,1298719.05,1298719.05,55.91,256333.91,280545.36,70013.12,91733.82,0.0,0.67,60.96,69.75,73.96,76.55,80.87,86.2,90.87,95.61,99.08,3208.3,428201.9,8760.0,0.54,387963308.35,100.0,100.0,8760.0,468677.1,468677.1,20.18,44288.05,44288.05,40653.75,40653.75,2646.22,2646.22,54.36,92.04,97.04,98.52,99.37,99.59,99.78,99.9,99.98,9446.36,61360.16,8760.0,468677.1,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.36,91.37,8004.0 +342,simulated,3B,2020.0,Manufacturing,Riverside,CAISO,19000,DEER,0.67,1902093240.27,97.87,8573.0,100.0,1595752.76,1595752.76,85.89,217133.93,221870.2,35487.77,38801.19,0.0,0.0,68.44,75.42,81.36,86.54,90.56,93.6,96.38,98.68,99.46,5431.29,304933.07,8760.0,0.11,1282576519.6,100.0,100.0,8760.0,1030381.51,1030381.51,55.46,146412.84,146412.84,35417.02,35417.02,3521.69,3521.69,63.82,72.01,80.14,87.43,93.01,96.53,98.53,99.49,99.86,15083.51,244941.42,8760.0,942337.78,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.65,97.87,8573.0 +343,simulated,3B,2020.0,OfficeLarge,Riverside,CAISO,16000,DEER,0.11,1637657925.31,59.62,5223.0,100.0,886970.18,886970.18,54.56,186947.25,313547.37,24748.22,200381.17,0.0,6.77,60.19,68.56,73.63,75.96,78.09,81.45,86.61,92.44,98.57,0.0,321817.93,8760.0,0.67,179290151.1,100.0,100.0,8760.0,371290.57,371290.57,22.84,20466.91,20466.91,12232.05,12232.05,1926.43,1926.43,85.95,95.56,99.02,99.34,99.53,99.75,99.92,99.97,99.98,3106.12,24133.44,8760.0,371290.57,44.11,18.69,18.0,0.5,9.36,11.91,13.0,14.0,16.27,18.0,20.0,22.2,23.44,25.07,29.42,0.42,59.62,5223.0 +344,simulated,3B,2020.0,Academic,Red Bluff,CAISO,14000,DEER,0.34,1429125939.14,94.5,8278.0,100.0,1271041.25,1271041.25,91.15,163142.23,172641.45,17775.36,27196.27,0.0,0.0,73.68,80.79,82.89,84.58,87.84,91.94,95.8,98.95,99.98,1747.67,141076.44,8760.0,0.51,479969897.95,100.0,100.0,8760.0,736154.75,736154.75,52.79,54791.08,54791.08,14434.82,14434.82,610.05,610.05,71.06,90.35,96.83,98.74,99.58,99.86,99.97,99.98,99.98,8444.94,96272.06,8760.0,719220.38,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.58,94.5,8278.0 +345,simulated,3B,2020.0,Academic,Red Bluff,CAISO,44000,DEER,0.23,4231079590.8,99.33,8701.0,100.0,2759796.73,2759796.73,62.54,482999.95,486275.09,105865.91,111048.12,0.0,0.0,61.08,72.16,77.11,80.24,84.21,89.42,93.93,97.34,99.51,18437.99,680135.25,8760.0,0.56,964021733.04,100.0,100.0,8760.0,910643.49,910643.49,20.64,110048.14,110048.14,79326.19,79326.19,7275.35,7275.35,53.52,79.63,92.39,95.97,97.83,98.89,99.41,99.74,99.83,17647.2,162269.81,8760.0,866616.68,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.33,99.33,8701.0 +346,simulated,3B,2020.0,Hospital,Red Bluff,CAISO,23000,DEER,0.2,1799585030.65,93.06,8152.0,100.0,1187917.14,1187917.14,51.14,205432.08,220753.81,56312.63,66113.78,0.0,1.12,66.46,73.08,76.8,79.26,82.9,88.48,93.68,97.75,99.76,2957.16,285174.63,8760.0,0.53,358452133.14,100.0,100.0,8760.0,470471.41,470471.41,20.26,40919.19,40919.19,29180.18,29180.18,2561.12,2561.12,60.09,92.88,96.48,98.31,99.03,99.55,99.78,99.9,99.95,5475.1,59861.62,8760.0,466984.18,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.4,93.06,8152.0 +347,simulated,3B,2020.0,Manufacturing,Red Bluff,CAISO,19000,DEER,0.98,2110050515.86,98.47,8626.0,100.0,1609587.87,1609587.87,86.63,240873.35,244615.18,24324.07,27179.21,0.0,0.0,69.01,74.65,79.35,83.87,87.97,91.2,94.02,96.6,98.53,4980.9,331960.04,8760.0,0.07,2077032019.58,100.0,100.0,8760.0,1416652.18,1416652.18,76.25,237104.11,237104.11,47441.73,47441.73,3423.33,3423.33,56.93,65.53,74.01,82.98,90.7,96.12,98.48,99.62,99.85,15557.55,445464.74,8760.0,1403768.25,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.88,98.47,8626.0 +348,simulated,3B,2020.0,OfficeLarge,Red Bluff,CAISO,16000,DEER,0.2,1493235000.12,54.97,4815.0,100.0,984154.82,984154.82,60.54,170460.62,310121.5,4306.76,188728.1,0.0,7.81,65.17,73.12,77.23,79.81,82.31,85.84,91.21,95.91,99.27,0.0,224702.48,8760.0,0.54,293808628.09,100.0,100.0,8760.0,469076.0,469076.0,28.86,33539.8,33539.8,18599.13,18599.13,1888.38,1888.38,76.45,93.63,96.52,97.75,98.81,99.5,99.7,99.85,99.93,3476.76,42090.25,8760.0,464690.63,43.3,17.73,16.91,-3.55,6.1,8.83,10.0,11.45,14.11,16.91,19.65,22.63,24.11,26.11,31.74,0.48,54.97,4815.0 +349,simulated,3B,2020.0,Academic,Stockton,CAISO,14000,DEER,0.46,1087402710.65,93.69,8207.0,100.0,1152859.15,1152859.15,82.68,124132.73,132496.98,9353.89,12666.63,0.0,0.0,76.8,83.63,86.11,87.95,90.53,93.72,96.77,99.09,99.91,800.1,98278.73,8760.0,0.48,497132224.04,100.0,100.0,8760.0,717139.4,717139.4,51.43,56750.25,56750.25,16177.67,16177.67,611.44,611.44,70.54,88.01,96.66,98.58,99.42,99.73,99.89,99.98,99.98,8702.46,96066.79,8760.0,717139.31,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.62,93.69,8207.0 +350,simulated,3B,2020.0,Academic,Stockton,CAISO,44000,DEER,0.3,3240383899.83,99.39,8707.0,100.0,2566004.12,2566004.12,58.15,369906.84,372158.48,53563.54,54783.7,0.0,0.0,66.96,77.56,82.23,85.01,87.96,91.44,95.03,98.04,99.55,14406.81,417762.59,8760.0,0.55,960740677.88,100.0,100.0,8760.0,947708.2,947708.2,21.48,109673.59,109673.59,72388.54,72388.54,7997.32,7997.32,56.76,79.87,93.61,96.45,98.03,99.13,99.6,99.83,99.9,18444.48,167561.65,8760.0,789445.31,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.37,99.39,8707.0 +351,simulated,3B,2020.0,Hospital,Stockton,CAISO,23000,DEER,0.28,1383663730.29,90.46,7924.0,100.0,1140921.77,1140921.77,49.12,157952.48,174616.83,21815.99,37647.57,0.0,0.21,72.08,78.44,81.45,84.0,87.2,91.06,95.39,98.54,99.81,2412.08,146975.99,8760.0,0.46,387535067.82,100.0,100.0,8760.0,473727.2,473727.2,20.4,44239.16,44239.16,31168.7,31168.7,2778.4,2778.4,57.36,91.48,95.84,97.77,98.74,99.43,99.73,99.92,99.99,5671.51,63770.83,8760.0,442641.92,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.42,90.46,7924.0 +352,simulated,3B,2020.0,Manufacturing,Stockton,CAISO,19000,DEER,1.67,1358057914.12,97.95,8580.0,100.0,1504690.84,1504690.84,80.98,155029.44,158281.81,11139.15,11752.11,0.0,0.0,78.12,82.24,85.92,89.28,92.34,95.11,97.16,98.63,99.7,4466.06,99632.0,8760.0,0.06,2264566249.11,100.0,100.0,8760.0,1372122.64,1372122.64,73.85,258512.13,258512.13,130329.39,130329.39,3739.23,3739.23,50.55,61.06,71.67,81.48,89.21,95.29,98.52,99.57,99.82,27166.02,457378.34,8760.0,1358938.06,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.91,97.95,8580.0 +353,simulated,3B,2020.0,OfficeLarge,Stockton,CAISO,16000,DEER,0.23,1148594810.79,51.31,4495.0,100.0,941813.17,941813.17,57.94,131118.13,255527.21,207.5,129981.17,0.0,9.57,70.8,78.66,82.59,84.61,86.31,88.89,92.99,97.4,99.73,0.0,138549.91,8760.0,0.49,264723859.93,100.0,100.0,8760.0,435917.1,435917.1,26.82,30219.62,30219.62,16973.34,16973.34,2047.07,2047.07,80.41,93.12,96.18,97.32,98.33,99.24,99.74,99.89,99.97,3325.7,31908.76,8760.0,435917.1,40.89,15.95,15.0,-2.2,6.18,9.11,10.0,11.06,13.01,15.0,16.91,19.26,20.74,22.55,27.82,0.46,51.31,4495.0 +354,simulated,3B,2020.0,Academic,Fresno,CAISO,14000,DEER,0.3,1525786063.42,95.45,8361.0,100.0,1203708.16,1203708.16,86.32,174176.49,182488.47,26700.17,33605.28,0.0,0.0,71.6,79.43,81.68,83.22,85.64,89.77,93.84,97.47,99.61,1356.7,158374.9,8760.0,0.54,451026240.68,100.0,100.0,8760.0,710764.17,710764.17,50.97,51487.01,51487.01,14618.65,14618.65,609.78,609.78,71.89,90.61,97.27,99.0,99.62,99.84,99.95,99.97,99.98,8477.29,87734.28,8760.0,708866.76,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.59,95.45,8361.0 +355,simulated,3B,2020.0,Academic,Fresno,CAISO,44000,DEER,0.2,4514651483.58,99.5,8716.0,100.0,2765506.96,2765506.96,62.67,515371.17,517972.86,149724.44,153378.7,0.0,0.0,57.36,70.33,75.57,78.7,82.83,88.5,93.55,97.58,99.55,19005.17,787347.57,8760.0,0.6,884802956.82,100.0,100.0,8760.0,828451.35,828451.35,18.77,101004.9,101004.9,70223.28,70223.28,6986.18,6986.18,54.13,77.82,92.11,96.06,97.96,99.0,99.61,99.79,99.92,17040.68,154071.06,8760.0,734323.79,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.3,99.5,8716.0 +356,simulated,3B,2020.0,Hospital,Fresno,CAISO,23000,DEER,0.18,1914631106.78,92.83,8132.0,100.0,1159346.91,1159346.91,49.91,218565.19,235444.06,67546.57,81183.78,0.0,4.12,62.91,71.19,75.62,78.12,81.34,86.14,91.92,96.91,99.63,3063.01,325076.01,8760.0,0.52,344348427.76,100.0,100.0,8760.0,433805.8,433805.8,18.68,39309.18,39309.18,27231.15,27231.15,2495.73,2495.73,58.95,92.24,96.35,97.98,98.8,99.45,99.81,99.92,99.99,4746.47,58328.07,8760.0,394257.22,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.37,92.83,8132.0 +357,simulated,3B,2020.0,Manufacturing,Fresno,CAISO,19000,DEER,0.8,2298286650.83,98.36,8616.0,100.0,1679728.25,1679728.25,90.4,262361.49,266746.36,35923.38,40070.42,0.0,0.0,65.72,72.72,77.71,83.01,87.56,91.45,94.75,97.66,99.6,5006.64,409435.14,8760.0,0.07,1848787984.58,100.0,100.0,8760.0,1205383.34,1205383.34,64.88,211048.86,211048.86,35162.14,35162.14,3297.91,3297.91,59.25,65.53,72.53,80.29,88.03,93.33,97.2,99.22,99.74,11891.93,401292.48,8760.0,1186190.51,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.72,98.36,8616.0 +358,simulated,3B,2020.0,OfficeLarge,Fresno,CAISO,16000,DEER,0.18,1561360573.95,55.17,4833.0,100.0,952759.15,952759.15,58.61,178237.51,323062.4,8039.05,205229.52,0.0,8.46,62.67,71.02,75.47,78.64,80.75,84.68,89.82,94.9,98.92,0.0,266452.91,8760.0,0.57,277999515.9,100.0,100.0,8760.0,418157.64,418157.64,25.72,31735.1,31735.1,17365.34,17365.34,1823.2,1823.2,75.32,92.89,96.47,97.57,98.34,99.35,99.78,99.93,99.97,3340.97,41193.66,8760.0,418157.64,43.3,18.5,17.91,-0.64,6.91,9.65,10.64,11.99,14.9,17.91,20.64,23.44,25.11,27.09,31.99,0.44,55.17,4833.0 +359,simulated,3B,2020.0,Academic,Daggett,CAISO,14000,DEER,0.31,1475851271.77,97.27,8521.0,100.0,1121263.93,1121263.93,80.41,168476.17,173201.65,33733.9,35695.7,0.0,0.0,71.84,79.28,81.53,82.72,85.05,88.9,93.3,96.96,99.47,4057.6,148773.96,8760.0,0.57,464443195.8,100.0,100.0,8760.0,810776.44,810776.44,58.14,53018.63,53018.63,14635.03,14635.03,609.03,609.03,73.52,95.34,98.11,99.21,99.69,99.86,99.95,99.97,99.99,8302.43,90570.21,8760.0,798948.0,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.72,97.27,8521.0 +360,simulated,3B,2020.0,Academic,Daggett,CAISO,44000,DEER,0.21,4409824163.72,99.61,8726.0,100.0,2705479.35,2705479.35,61.31,503404.58,505366.05,164584.39,166146.46,0.0,0.0,58.08,70.87,75.51,78.85,83.55,88.84,94.02,97.53,99.6,26609.54,767072.01,8760.0,0.65,947698020.46,100.0,100.0,8760.0,1003913.3,1003913.3,22.75,108184.71,108184.71,78435.13,78435.13,7169.87,7169.87,57.07,84.7,94.51,96.99,98.24,99.19,99.68,99.84,99.92,17581.69,158434.8,8760.0,880329.72,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.37,99.61,8726.0 +361,simulated,3B,2020.0,Hospital,Daggett,CAISO,23000,DEER,0.18,1866361833.27,94.69,8295.0,100.0,1102499.01,1102499.01,47.47,213055.0,224998.41,63403.79,71016.35,0.0,10.55,63.95,70.73,74.83,77.27,80.47,85.9,91.92,96.36,99.42,3966.75,337374.32,8760.0,0.63,342885541.56,100.0,100.0,8760.0,486007.08,486007.08,20.92,39142.19,39142.19,26873.57,26873.57,2600.7,2600.7,62.51,94.65,97.21,98.25,99.1,99.54,99.82,99.94,99.97,5550.42,58681.57,8760.0,486007.08,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.44,94.69,8295.0 +362,simulated,3B,2020.0,Manufacturing,Daggett,CAISO,19000,DEER,0.91,2110283974.48,98.63,8640.0,100.0,1547934.49,1547934.49,83.31,240900.0,244245.83,37121.95,39824.87,0.0,0.0,66.28,72.98,78.7,83.44,87.8,91.56,94.6,97.13,99.0,5941.35,363424.06,8760.0,0.08,1917682630.2,100.0,100.0,8760.0,1337052.72,1337052.72,71.96,218913.54,218913.54,39859.01,39859.01,3378.21,3378.21,59.81,67.68,74.95,82.91,90.18,94.59,97.95,99.26,99.83,14861.76,402084.92,8760.0,1322555.06,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.86,98.63,8640.0 +363,simulated,3B,2020.0,OfficeLarge,Daggett,CAISO,16000,DEER,0.19,1547843857.0,57.95,5076.0,100.0,928519.92,928519.92,57.12,176694.5,304933.78,21366.14,189996.4,0.0,9.61,61.85,70.68,75.35,78.68,81.0,84.53,89.42,94.55,99.04,0.0,267263.49,8760.0,0.63,286799742.3,100.0,100.0,8760.0,467350.09,467350.09,28.75,32739.7,32739.7,18005.61,18005.61,1870.51,1870.51,78.18,94.06,95.4,96.82,98.6,99.54,99.79,99.87,99.93,3461.25,36930.84,8760.0,467350.09,43.65,17.43,17.16,-5.62,4.4,7.72,9.29,11.0,14.11,17.16,20.08,23.19,24.89,26.88,31.73,0.5,57.95,5076.0 +364,simulated,2B,2020.0,Academic,El Centro,CAISO,14000,DEER,0.13,2556406983.52,98.39,8619.0,100.0,1599545.77,1599545.77,114.71,291827.28,296601.34,82125.47,87566.86,0.0,0.0,63.08,70.23,72.04,76.47,84.35,90.46,95.66,98.86,99.79,9348.48,599448.69,8760.0,0.86,328350289.7,100.0,100.0,8760.0,389613.56,389613.56,27.94,37482.91,37482.91,11956.77,11956.77,606.46,606.46,64.34,77.23,92.32,99.65,99.84,99.92,99.97,99.98,99.99,6295.13,68707.07,8760.0,388600.99,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.24,98.39,8619.0 +365,simulated,2B,2020.0,Academic,El Centro,CAISO,44000,DEER,0.09,7473371059.75,99.91,8752.0,100.0,3335605.63,3335605.63,75.59,853124.55,853904.37,441798.1,442948.96,0.0,0.0,44.47,57.48,61.99,67.43,77.04,85.95,92.48,96.78,99.21,65108.35,1606845.66,8760.0,0.88,679719562.48,100.0,100.0,8760.0,551848.36,551848.36,12.51,77593.56,77593.56,68488.29,68488.29,5485.73,5485.73,45.72,68.65,89.26,97.51,99.52,99.76,99.87,99.95,99.98,14243.71,124386.06,8760.0,464040.74,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.17,99.91,8752.0 +366,simulated,2B,2020.0,Hospital,El Centro,CAISO,23000,DEER,0.08,3145803069.68,95.48,8364.0,100.0,1423777.59,1423777.59,61.3,359109.94,376112.28,143502.34,165532.36,0.0,7.79,49.85,57.19,62.93,67.68,76.7,85.24,92.25,97.25,99.62,36256.33,692457.29,8760.0,0.86,236244971.76,100.0,100.0,8760.0,385861.25,385861.25,16.61,26968.6,26968.6,21406.09,21406.09,2041.54,2041.54,69.78,96.03,99.37,99.82,99.89,99.94,99.98,99.99,99.99,3623.79,42733.04,8760.0,385655.5,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.27,95.48,8364.0 +367,simulated,2B,2020.0,Manufacturing,El Centro,CAISO,19000,DEER,0.17,4348319670.15,98.88,8662.0,100.0,1903412.66,1903412.66,102.44,496383.52,501999.5,323933.58,335128.58,0.0,0.0,44.36,52.28,61.35,70.65,77.74,83.76,89.55,94.45,99.35,14961.55,870426.77,8760.0,0.16,746839579.67,100.0,100.0,8760.0,1117440.26,1117440.26,60.14,85255.66,85255.66,20592.25,20592.25,2618.55,2618.55,80.27,85.56,90.54,94.13,97.18,98.98,99.67,99.93,99.97,5357.32,45717.61,8760.0,1098715.06,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.59,98.88,8662.0 +368,simulated,2B,2020.0,OfficeLarge,El Centro,CAISO,16000,DEER,0.1,2551574215.72,68.28,5981.0,100.0,1165164.78,1165164.78,71.68,291275.6,426613.31,115153.81,426827.74,0.0,8.03,50.14,57.66,62.24,68.16,74.2,82.47,90.5,96.45,99.52,0.0,593956.79,8760.0,0.86,255020910.27,100.0,100.0,8760.0,433527.65,433527.65,26.67,29111.98,29111.98,17418.97,17418.97,1460.2,1460.2,72.69,96.71,99.53,99.71,99.85,99.93,99.97,99.97,99.99,2965.6,57958.29,8760.0,433527.65,49.75,24.37,24.19,1.56,12.0,15.53,17.0,18.42,21.52,24.19,27.16,30.0,31.56,33.09,37.02,0.37,68.28,5981.0 +369,simulated,4B,2020.0,Academic,Bishop,CAISO,14000,DEER,0.95,656226083.94,98.09,8593.0,100.0,888687.5,888687.5,63.73,74911.65,76367.52,16312.85,17795.78,0.0,0.0,81.0,89.25,91.6,93.16,94.35,96.29,98.21,99.75,99.98,2704.09,75453.17,8760.0,0.38,624039460.94,100.0,100.0,8760.0,722883.12,722883.12,51.84,71237.38,71237.38,16509.22,16509.22,613.82,613.82,68.86,79.19,92.02,95.35,97.63,99.19,99.78,99.93,99.98,9431.43,139989.42,8760.0,705129.79,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.81,98.09,8593.0 +370,simulated,4B,2020.0,Academic,Bishop,CAISO,44000,DEER,0.55,2200440255.58,99.54,8720.0,100.0,2036843.13,2036843.13,46.16,251191.81,252344.07,80645.62,81991.68,0.0,0.0,63.54,83.78,88.26,90.61,92.73,94.74,96.6,98.7,99.83,18542.41,318618.68,8760.0,0.57,1209933491.55,100.0,100.0,8760.0,1157587.88,1157587.88,26.23,138120.26,138120.26,77360.6,77360.6,8996.55,8996.55,58.57,80.22,90.41,94.14,96.91,98.79,99.49,99.82,99.95,20785.98,201136.9,8760.0,966734.04,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.57,99.54,8720.0 +371,simulated,4B,2020.0,Hospital,Bishop,CAISO,23000,DEER,0.54,898197574.07,94.0,8234.0,100.0,865737.23,865737.23,37.27,102533.97,109083.99,43891.6,51777.99,0.0,9.73,69.69,84.93,88.13,90.01,92.23,93.8,96.27,98.08,99.93,3691.65,106487.0,8760.0,0.56,487890598.61,100.0,100.0,8760.0,475259.54,475259.54,20.46,55695.27,55695.27,38417.64,38417.64,3090.31,3090.31,54.59,87.07,91.12,94.1,96.63,98.37,99.55,99.85,99.94,6891.56,71576.0,8760.0,449592.44,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.55,94.0,8234.0 +372,simulated,4B,2020.0,Manufacturing,Bishop,CAISO,19000,DEER,3.87,659172152.15,98.56,8634.0,100.0,859140.85,859140.85,46.24,75247.96,76346.09,15678.81,16976.36,0.0,0.0,82.49,87.36,90.27,92.66,94.92,96.62,98.2,99.46,99.92,5404.44,67666.27,8760.0,0.08,2549740468.19,100.0,100.0,8760.0,1248192.65,1248192.65,67.18,291066.26,291066.26,209855.02,209855.02,4165.12,4165.12,42.27,53.55,65.57,75.74,82.82,89.86,95.9,98.84,99.84,30899.19,489152.88,8760.0,1209521.79,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,1.45,98.56,8634.0 +373,simulated,4B,2020.0,OfficeLarge,Bishop,CAISO,16000,DEER,0.48,755502469.97,51.29,4493.0,100.0,752573.48,752573.48,46.3,86244.57,168151.01,256.7,100567.06,0.0,7.67,70.56,80.01,87.52,90.91,92.68,93.94,95.1,96.79,99.37,0.0,104730.29,8760.0,0.5,358952944.1,100.0,100.0,8760.0,494712.98,494712.98,30.43,40976.36,40976.36,19255.47,19255.47,2261.12,2261.12,80.62,87.99,90.88,94.36,97.51,99.04,99.6,99.84,99.93,3769.69,34993.65,8760.0,494712.98,31.1,11.81,11.74,-6.1,0.46,4.01,5.71,6.99,9.4,11.74,14.11,17.16,18.55,19.75,22.55,0.66,51.29,4493.0 +177,measured,3B,2010.0,Academic,San Francisco,CAISO,6000,,1.04,207839780.5,89.65,7450.0,94.86,189752.31,189752.31,33.27,23726.0,26464.84,13471.85,18273.86,0.0,110.77,56.56,79.53,88.94,92.55,95.32,98.6,99.43,99.82,99.89,2109.17,32905.21,8310.0,0.57,221938040.66,94.28,59.58,4921.0,206024.44,206024.44,36.12,25335.39,42520.83,17311.65,39745.28,0.0,100.87,51.27,72.13,88.72,95.99,98.23,99.43,99.82,99.88,99.95,0.0,43641.52,8259.0,129542.64,36.6,16.37,15.9,1.1,8.9,11.2,12.1,13.0,14.6,15.9,17.5,19.1,20.1,21.2,24.5,1.09,49.86,4030.0 +178,measured,3B,2020.0,Academic,San Francisco,CAISO,5000,,2.16,50485423.97,37.97,3150.0,94.71,254813.63,254813.63,47.29,5763.18,15180.02,0.0,4914.5,0.0,102.47,94.56,97.19,98.38,98.93,99.35,99.59,99.67,99.78,99.92,0.0,2740.41,8297.0,0.05,116421847.92,88.77,27.03,2102.0,325086.51,325086.51,60.33,13290.17,49164.76,0.0,34506.96,0.0,246.49,85.78,93.61,96.59,98.47,99.06,99.45,99.7,99.83,99.94,0.0,8301.58,7776.0,325086.51,34.1,15.32,14.9,0.6,7.9,9.8,10.7,11.5,13.2,14.9,16.7,18.4,19.4,20.6,23.5,1.28,11.27,876.0 +179,measured,3B,2020.0,Academic,San Francisco,CAISO,11000,,2.47,636597588.34,65.95,5775.0,99.95,624374.05,624374.05,57.34,72670.96,110183.01,16506.98,58822.78,0.0,116.17,67.7,78.7,85.55,90.19,93.92,96.68,98.38,99.37,99.9,0.0,99556.8,8756.0,0.1,1573807984.08,99.98,89.04,7798.0,1094599.29,1094599.29,100.53,179658.45,201775.93,120064.11,154903.18,0.0,138.52,47.92,64.87,79.02,89.1,94.99,98.61,99.77,99.94,99.97,26981.38,295014.63,8758.0,1094599.29,39.4,15.03,14.4,-1.1,6.1,8.9,10.0,11.1,12.8,14.4,15.6,17.8,18.9,20.6,25.0,1.75,56.28,4928.0 +180,measured,3C,2020.0,Academic,San Francisco,CAISO,1000,,1.28,16517441.34,16.54,1448.0,99.97,35843.32,35843.32,56.74,1885.55,11403.17,0.0,10732.89,0.0,101.24,87.08,89.32,91.74,94.05,96.14,97.72,99.08,99.82,99.93,0.0,0.0,8757.0,0.02,21112060.28,99.97,82.31,7208.0,57345.85,57345.85,90.77,2410.05,2927.97,553.37,584.37,0.0,238.11,91.17,93.82,95.46,97.02,98.17,98.7,99.09,99.37,99.68,461.88,651.55,8757.0,57345.85,45.0,14.63,13.3,-1.7,5.6,8.3,9.4,10.0,12.2,13.3,15.0,17.2,18.9,20.6,26.1,1.6,6.27,549.0 +181,measured,3B,2020.0,Academic,San Francisco,CAISO,5000,,0.52,1103428037.78,79.42,6925.0,99.34,1628340.48,1628340.48,318.68,125962.1,158674.32,34525.58,69554.5,0.0,232.44,78.94,86.3,91.31,95.56,98.22,99.26,99.76,99.94,99.98,4862.31,116409.75,8702.0,0.4,532982974.36,94.51,51.33,4250.0,581984.49,581984.49,113.9,60842.81,118549.68,5331.43,94702.47,0.0,112.97,61.95,80.86,89.5,94.09,97.09,98.54,99.09,99.59,99.96,0.0,96672.0,8279.0,511636.03,34.1,15.25,14.7,0.6,7.8,9.7,10.5,11.4,13.0,14.7,16.5,18.3,19.4,20.6,23.6,0.36,36.0,2968.0 +182,measured,4A,2000.0,Academic,Portland,NorthernGrid_West,10000,,0.22,643327666.81,30.6,2683.0,99.82,767691.73,767691.73,73.13,73238.58,239342.47,0.0,234980.43,0.0,101.57,74.16,78.75,84.22,90.09,95.22,98.16,99.53,99.84,99.97,0.0,90914.53,8768.0,0.0,140765230.13,99.82,39.22,3439.0,308056.74,308056.74,29.34,16025.19,40857.47,0.0,33089.71,0.0,101.04,79.27,90.97,97.18,99.1,99.67,99.83,99.9,99.97,99.97,0.0,22636.54,8768.0,308056.74,35.6,13.87,14.4,-16.7,0.03,4.0,6.1,8.0,11.1,14.4,17.8,20.6,21.7,23.0,26.7,0.4,0.09,8.0 +183,measured,3C,2000.0,Office,San Francisco,CAISO,19000,,1.85,565610603.86,55.71,2806.0,57.34,1047349.42,1047349.42,54.73,64567.42,116161.23,173.95,806.76,0.0,100.06,88.09,89.73,90.78,91.68,93.33,95.56,97.93,99.32,99.86,0.0,931.85,5023.0,0.19,1021513511.43,60.29,98.94,5225.0,945137.06,945137.06,49.39,116611.13,117860.93,49224.18,49919.75,0.0,499.15,69.12,80.67,88.73,93.07,95.08,96.52,98.26,99.32,99.89,30274.94,146330.48,5281.0,945137.06,30.8,14.65,14.1,6.4,11.2,12.1,12.5,12.9,13.5,14.1,14.9,15.7,16.2,16.8,18.6,0.9,54.84,2753.0 +184,measured,3C,,Warehouse,San Francisco,CAISO,10000,,0.33,514735283.37,99.97,8755.0,99.98,357097.69,357097.69,37.28,58759.74,58779.87,48154.6,48160.79,0.0,3017.56,25.61,77.67,89.85,94.62,96.76,97.98,98.85,99.31,99.76,35041.71,67236.84,8758.0,0.84,171265074.19,98.54,58.31,5040.0,102743.35,102743.35,10.73,19550.81,33557.88,8468.74,17485.26,0.0,691.92,55.33,72.22,74.85,77.8,82.12,88.4,93.03,96.22,98.81,0.0,31447.14,8632.0,96447.24,36.7,14.21,13.6,4.4,10.0,11.1,11.7,12.2,12.8,13.6,14.4,15.6,16.1,17.2,19.15,0.29,58.26,5029.0 +185,measured,3C,,Warehouse,San Francisco,CAISO,4000,,1.19,93908893.21,79.65,6769.0,97.01,87861.34,87861.34,20.39,10720.19,13458.44,3320.13,5313.86,0.0,103.4,64.73,69.04,84.24,96.49,98.67,99.33,99.64,99.84,99.95,2265.39,22344.91,8498.0,0.59,117527912.71,73.88,96.71,6259.0,52828.23,52828.23,12.26,13416.43,13873.0,13269.15,13827.69,0.0,113.78,22.22,41.46,58.75,80.66,92.92,97.53,99.63,99.92,99.95,5909.18,19869.96,6472.0,52828.23,32.8,14.8,14.4,3.9,10.0,11.7,12.2,12.8,13.6,14.4,15.6,16.7,17.2,17.8,20.0,0.6,71.38,4451.0 +186,measured,3C,2000.0,Office,San Francisco,CAISO,12000,,1.15,308088814.69,100.0,8780.0,99.95,782071.38,782071.38,65.99,35073.86,35073.86,16216.0,16216.0,3425.41,3425.41,91.22,94.2,96.65,98.39,99.15,99.69,99.87,99.95,99.99,13814.71,18622.05,8780.0,0.22,355667631.02,99.94,28.92,2539.0,545795.18,545795.18,46.06,40490.4,140002.04,0.0,123661.73,0.0,211.57,74.85,81.9,91.54,94.85,97.35,98.97,99.73,99.93,99.99,0.0,57701.76,8779.0,522258.41,32.8,15.18,14.7,4.4,10.6,12.1,12.5,12.9,13.9,14.7,15.6,16.7,17.5,18.3,20.55,0.7,28.92,2539.0 +187,measured,3C,2010.0,Other/Gymnasium,San Francisco,CAISO,4000,,2.71,101297546.82,19.99,1391.0,79.43,291730.57,291730.57,78.5,11563.65,57843.17,0.0,44685.33,0.0,794.67,87.12,92.02,95.54,97.53,98.63,99.24,99.6,99.87,99.9,0.0,0.0,6958.0,0.02,313653061.58,73.65,52.84,3415.0,355076.68,355076.68,95.55,35805.14,67865.68,1607.92,43842.35,0.0,112.53,70.86,80.94,87.28,92.33,95.06,96.93,98.42,99.38,99.92,0.0,47478.08,6452.0,355076.68,32.8,14.8,14.4,3.9,10.0,11.7,12.2,12.8,13.6,14.4,15.6,16.7,17.2,17.8,20.0,1.3,8.51,442.0 +188,measured,3C,2010.0,Office,San Francisco,CAISO,15000,,0.83,646016020.35,100.0,7881.0,89.97,931066.11,931066.11,60.37,73746.12,73746.12,26583.46,26583.46,2267.23,2267.23,82.44,87.68,92.02,95.7,97.68,98.86,99.34,99.75,99.95,22557.32,41697.63,7881.0,0.58,536853341.86,89.51,63.45,4975.0,461427.34,461427.34,29.92,61284.63,96589.5,16437.85,43479.26,0.0,196.81,68.69,73.05,80.67,88.02,92.91,95.51,97.4,98.78,99.76,0.0,107161.71,7841.0,439631.34,36.7,14.26,13.9,4.4,10.0,11.11,11.7,12.2,12.8,13.9,14.4,15.6,16.15,17.2,19.4,0.5,63.43,4965.0 +189,measured,3C,2000.0,Lab,San Francisco,CAISO,10000,,2.24,1360486467.82,98.77,8355.0,96.56,2175630.92,2175630.92,214.29,155306.67,157239.88,5056.49,5113.43,0.0,538.44,75.94,86.74,92.67,96.23,97.94,98.77,99.48,99.73,99.96,3623.93,197459.6,8459.0,0.24,3024521459.24,94.16,99.92,8424.0,1014599.17,1014599.17,99.93,345265.01,345558.28,302696.68,302837.22,0.0,68920.22,0.16,10.05,50.76,73.23,84.77,93.27,97.98,99.48,99.9,243806.49,420697.42,8248.0,1008953.83,36.7,14.21,13.6,4.4,10.0,11.1,11.7,12.2,12.8,13.6,14.4,15.6,16.1,17.2,19.15,0.47,98.68,8137.0 +190,measured,3C,2000.0,Lab,San Francisco,CAISO,11000,,2.91,1065263920.04,89.79,7874.0,99.83,1421290.36,1421290.36,127.09,121273.21,135057.76,19910.8,34054.4,0.0,100.42,72.76,84.88,90.97,95.6,97.78,98.6,99.32,99.61,99.89,926.63,162065.68,8769.0,0.27,3094976258.79,99.72,99.85,8756.0,1440228.72,1440228.72,128.79,352342.47,352866.19,320906.01,321121.44,0.0,43551.32,3.68,40.07,75.34,90.4,96.88,99.05,99.69,99.91,99.98,239729.36,429814.43,8759.0,1440228.72,32.8,14.71,14.15,4.4,10.6,11.7,12.2,12.8,13.3,14.15,15.0,16.1,16.7,17.5,19.4,1.01,89.76,7862.0 +191,measured,3C,2000.0,Lab,San Francisco,CAISO,7000,,1.97,2035052486.62,99.87,8519.0,97.11,2285465.78,2285465.78,311.9,231677.2,231976.34,75009.44,75079.05,0.0,168.93,72.33,82.79,90.3,94.94,97.51,98.7,99.46,99.77,99.96,63524.52,279491.86,8530.0,0.38,4007887337.85,97.02,99.86,8515.0,1119175.63,1119175.63,152.74,456271.33,456914.72,414705.69,415019.22,0.0,68530.89,0.16,0.54,22.62,58.62,74.99,88.29,97.43,99.26,99.8,341192.47,559657.9,8522.0,1065413.2,36.7,14.43,13.9,4.4,10.6,11.7,12.2,12.2,13.2,13.9,14.4,15.6,16.4,17.2,19.4,0.49,99.73,8499.0 +192,measured,3C,2000.0,Office,San Francisco,CAISO,11000,,1.73,159844977.64,95.49,8191.0,97.64,549710.42,549710.42,49.16,18197.29,19057.16,11232.72,11943.74,0.0,263.48,93.63,96.4,98.31,99.2,99.72,99.9,99.97,99.98,99.99,2948.7,15310.27,8577.0,0.21,281265167.06,96.73,45.46,3863.0,256249.61,256249.61,22.91,32020.17,70431.11,0.0,63369.98,0.0,107.11,67.52,74.3,80.7,87.56,92.43,95.99,98.39,99.49,99.88,0.0,54241.04,8497.0,256249.61,32.8,15.14,14.45,4.4,10.6,11.95,12.2,12.8,13.9,14.45,15.6,16.7,17.2,18.3,20.55,0.47,44.14,3662.0 +193,measured,3C,2000.0,Office,San Francisco,CAISO,10000,,0.35,592077596.32,98.29,7016.0,80.84,744701.93,744701.93,72.82,67404.1,68582.39,27810.27,31863.92,0.0,941.4,66.75,86.92,93.92,96.97,98.8,99.68,99.89,99.96,99.96,8551.74,101216.35,7101.0,0.51,211532425.97,82.13,31.58,2278.0,407309.87,407309.87,39.83,24081.56,76261.8,0.0,50675.68,0.0,120.4,81.26,88.74,93.51,96.2,97.82,98.86,99.47,99.86,99.97,0.0,22975.71,7214.0,401947.91,32.8,15.18,14.6,4.4,10.6,11.9,12.2,12.8,13.9,14.6,15.6,16.93,17.5,18.3,20.6,0.55,30.44,2081.0 +194,measured,3C,2000.0,Lab,San Francisco,CAISO,9000,,3.78,1063254970.25,57.38,5013.0,99.46,1297817.68,1297817.68,145.67,121044.51,210964.67,4451.24,94724.62,0.0,1499.56,72.91,78.89,86.99,92.82,96.6,98.23,99.14,99.7,99.93,0.0,177368.41,8737.0,0.24,4018925594.06,99.4,99.12,8661.0,1355039.05,1355039.05,152.1,457527.96,461598.87,431416.06,432718.95,0.0,25842.26,1.0,2.5,38.08,80.05,94.41,97.66,99.28,99.81,99.92,382165.21,516354.94,8731.0,1277981.24,32.8,14.74,14.15,4.4,10.6,11.7,12.2,12.8,13.3,14.15,15.0,16.1,16.7,17.8,19.4,1.04,57.07,4982.0 +195,measured,3C,2000.0,Lab,San Francisco,CAISO,8000,,1.2,5834740469.56,100.0,8767.0,99.08,2281556.96,2281556.96,295.32,664246.41,664246.41,618320.53,618320.53,57908.55,57908.55,6.55,27.38,60.21,80.49,91.41,96.43,98.54,99.53,99.95,439346.73,838877.65,8703.0,0.8,6999048903.87,99.93,99.83,8763.0,1754202.76,1754202.76,227.06,796795.18,798159.09,678659.98,680834.25,0.0,5377.73,0.22,3.46,28.38,50.84,53.87,65.08,92.87,99.28,99.81,502717.35,1113065.02,8778.0,1250762.15,32.8,14.85,14.4,4.4,10.6,11.7,12.2,12.8,13.3,14.4,15.0,16.4,17.2,17.8,20.0,0.77,99.83,8688.0 +196,measured,3C,2000.0,Lab,San Francisco,CAISO,6000,,2.41,3037733803.96,100.0,8565.0,96.87,1585458.08,1585458.08,273.85,345825.8,345825.8,289813.52,289813.52,29921.12,29921.12,23.77,54.7,76.03,88.99,94.98,97.88,98.94,99.67,99.92,164208.98,468094.51,8509.0,0.49,7108567273.28,97.14,100.0,8539.0,1501404.73,1501404.73,259.33,809263.12,809263.12,794023.8,794023.8,328667.75,328667.75,0.0,0.0,0.19,10.83,40.64,71.46,89.83,97.6,99.72,674291.26,921086.07,8533.0,1435865.54,32.8,15.11,14.4,4.4,10.6,11.87,12.2,12.8,13.6,14.4,15.6,16.7,17.2,18.3,20.55,0.95,100.0,8273.0 +197,measured,4A,2020.0,Academic/Lab,Louisville,PJM_East,5000,,0.83,319161821.8,56.24,4913.0,99.44,189878.56,189878.56,39.3,36334.45,64600.33,1858.19,74393.67,0.0,102.12,53.93,58.04,64.97,72.65,86.35,97.12,99.68,99.94,99.98,0.0,79417.76,8735.0,0.65,265371472.3,99.95,84.28,7400.0,185223.47,185223.47,38.34,30210.78,35844.68,31358.82,37266.53,0.0,101.89,34.08,57.54,85.73,97.19,98.67,99.4,99.81,99.93,99.97,816.38,48661.81,8780.0,171752.61,38.3,16.39,18.3,-15.85,1.7,7.2,9.4,11.1,14.72,18.3,21.1,23.3,24.4,25.6,28.6,0.98,53.35,4660.0 +198,measured,4C,2010.0,Medical Office,Oregon,NorthernGrid_West,9000,,0.32,677222964.33,99.85,8574.0,98.03,383942.15,383942.15,44.6,77308.56,77425.77,40717.1,40783.04,0.0,2082.72,45.28,70.83,77.64,82.64,88.02,93.39,97.15,99.18,99.76,30460.34,98602.3,8587.0,0.75,217114745.68,98.03,64.95,5577.0,225329.19,225329.19,26.17,24784.79,38161.55,14545.12,32791.72,0.0,714.36,59.67,78.91,89.66,96.52,98.95,99.69,99.94,99.99,99.99,0.0,40563.97,8587.0,130481.83,37.8,11.89,11.1,-7.2,2.8,5.6,6.7,7.22,9.2,11.1,12.9,15.6,16.7,18.3,22.8,0.59,64.8,5564.0 +199,measured,3B,1990.0,Medical Office,San Francisco,CAISO,4000,,1.47,495035117.09,93.36,7950.0,96.94,380705.18,380705.18,95.3,56356.46,60361.66,22654.39,25413.11,0.0,100.38,59.82,71.71,80.61,86.87,92.35,96.19,98.47,99.67,99.96,1856.61,88478.16,8515.0,0.39,729137348.45,96.94,99.99,8514.0,354580.83,354580.83,88.76,83007.44,83017.19,65907.29,65907.29,0.0,8570.86,1.96,59.21,80.72,87.19,92.95,97.09,99.03,99.65,99.89,53820.67,88190.58,8515.0,349908.83,41.7,16.66,15.6,0.0,8.3,10.79,11.7,12.3,13.9,15.6,17.2,19.4,20.6,22.2,26.7,0.93,93.35,7949.0 +200,measured,3B,1990.0,Medical Office,Los Angeles,CAISO,6000,,0.13,1804589538.7,97.11,8528.0,99.98,867661.08,867661.08,155.84,205440.52,211559.41,183408.64,190488.87,0.0,103.31,35.36,48.18,67.81,79.48,86.81,95.01,98.35,99.7,99.93,59755.18,307805.22,8782.0,0.92,228694994.82,99.95,99.53,8739.0,253834.72,253834.72,45.59,26035.4,26157.55,26528.22,26628.35,0.0,227.0,47.3,92.79,98.12,99.29,99.75,99.89,99.93,99.98,99.99,7763.03,36187.2,8780.0,163110.77,45.6,18.7,17.2,4.4,10.0,12.2,13.3,13.9,15.6,17.2,19.4,21.7,22.8,24.4,29.4,0.29,96.69,8488.0 +201,measured,3B,2010.0,Lab,Los Angeles,CAISO,12000,,0.57,4173233073.35,97.01,8167.0,95.83,2038651.21,2038651.21,164.99,475094.84,489756.11,352780.27,371559.9,0.0,128.95,35.91,54.26,67.49,78.08,86.74,92.43,96.21,98.76,99.68,108226.48,748499.3,8418.0,0.69,2344564574.93,99.87,100.0,8773.0,671644.89,671644.89,54.36,266913.09,266913.09,262676.67,262676.67,904.86,904.86,0.13,3.69,22.32,53.25,80.67,94.26,98.65,99.68,99.92,206638.55,319476.77,8773.0,669840.31,40.6,18.04,16.7,1.1,10.6,12.2,13.05,13.9,15.0,16.7,18.9,21.1,22.2,23.48,27.8,0.33,97.01,8166.0 +202,measured,3C,2010.0,Medical Office,San Francisco,CAISO,21000,,4.79,296848435.38,99.89,8773.0,99.99,91803.05,91803.05,4.44,33794.22,33832.74,26526.6,26564.69,0.0,329.7,18.58,21.12,51.16,58.04,69.98,80.39,84.5,92.92,99.45,20810.24,49634.88,8783.0,0.25,1423268912.91,99.87,99.18,8701.0,589403.95,589403.95,28.52,162029.7,163370.48,138481.21,139134.03,0.0,506.28,6.99,37.02,65.62,82.5,93.01,94.52,96.87,98.45,99.89,99841.25,206470.03,8773.0,587186.38,42.8,15.92,14.4,-2.2,6.7,9.4,10.6,11.7,13.3,14.4,16.1,18.9,20.6,22.2,27.2,6.42,99.18,8701.0 +203,measured,3B,2020.0,Academic/Office,Los Angeles,CAISO,8000,,0.77,1664286833.46,99.88,8670.0,98.82,641915.03,641915.03,85.47,189467.99,189686.52,156333.27,156561.5,0.0,3253.09,20.97,41.27,57.88,69.98,80.82,89.67,95.54,98.4,99.52,80978.28,284582.27,8680.0,0.67,1274819448.37,96.08,99.59,8413.0,311217.21,311217.21,41.44,145129.72,145734.07,153540.29,154003.55,0.0,8900.09,1.49,11.64,25.51,38.34,51.03,68.26,89.5,96.64,99.82,92003.89,194905.65,8440.0,276786.25,38.9,17.53,16.7,2.8,10.6,12.2,13.3,13.9,15.0,16.7,18.3,20.0,21.1,22.2,25.6,0.48,99.46,8295.0 +204,measured,3C,1980.0,Lab/Office,San Francisco,CAISO,8000,,3.76,646836174.4,32.11,2819.0,99.95,672263.46,672263.46,85.43,73638.0,229351.41,0.0,204663.09,0.0,2110.82,69.79,72.3,83.47,91.65,94.86,96.85,98.18,99.31,99.73,0.0,154275.42,8780.0,0.18,2435226848.38,99.95,99.79,8762.0,832294.99,832294.99,105.77,277234.39,277803.92,245745.42,246100.55,0.0,2079.86,2.2,19.27,51.25,70.32,83.79,92.38,97.81,99.49,99.92,182924.62,360353.26,8780.0,832294.99,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.49,14.7,15.6,16.7,17.2,18.3,21.1,1.24,32.11,2819.0 +205,measured,3C,2010.0,Lab/Office,San Francisco,CAISO,8000,,0.37,959843992.58,99.97,8778.0,99.97,459107.74,459107.74,61.1,109271.86,109309.2,84972.16,85020.5,0.0,3156.47,13.44,55.3,73.47,84.3,92.14,96.03,98.3,99.31,99.76,58814.65,143926.78,8781.0,0.91,351808681.19,99.97,98.82,8677.0,183377.66,183377.66,24.4,40051.08,40531.12,36823.41,37203.28,0.0,482.25,25.44,49.79,72.14,89.94,96.44,98.43,99.45,99.87,99.94,18132.09,58171.22,8781.0,151617.56,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.35,14.7,15.6,16.7,17.2,18.3,21.1,0.4,98.78,8674.0 +206,measured,3C,2010.0,Lab/Office,San Francisco,CAISO,3000,,3.18,129922982.01,65.17,4275.0,71.36,400091.04,400091.04,124.01,14831.39,23376.46,967.43,10070.94,0.0,100.87,88.99,97.14,97.79,98.35,98.77,99.09,99.42,99.76,99.9,0.0,13716.01,6251.0,0.1,532196913.45,99.95,91.88,8045.0,295924.77,295924.77,91.72,60753.07,66122.3,64930.88,67971.79,0.0,129.79,27.6,44.55,75.53,92.7,97.85,99.35,99.76,99.93,99.98,25101.76,88342.57,8756.0,295924.77,38.9,13.87,13.9,0.6,7.8,10.0,10.6,11.7,12.8,13.9,15.0,16.1,16.7,17.8,20.0,0.74,55.72,3483.0 +207,measured,3C,2010.0,Lab/Office,San Francisco,CAISO,4000,,0.88,289495095.3,49.18,1793.0,41.62,305523.37,305523.37,79.46,33047.39,67200.65,0.0,40223.96,0.0,101.49,70.93,80.97,86.26,90.67,93.94,96.13,98.19,99.51,99.86,0.0,39213.42,3646.0,0.22,255156391.64,41.62,99.51,3628.0,275831.16,275831.16,71.73,29127.44,29271.96,16050.01,16184.78,0.0,101.05,68.9,87.14,92.07,95.28,97.39,98.44,99.31,99.64,99.89,8648.54,33467.74,3646.0,275831.16,32.2,16.54,16.1,2.2,11.7,13.9,14.4,15.0,15.6,16.1,17.2,18.3,18.9,19.4,21.7,0.9,48.79,1779.0 +208,measured,3C,2000.0,Lab,San Francisco,CAISO,9000,,1.27,770325489.32,70.05,6141.0,99.8,1041154.65,1041154.65,117.25,87696.44,125182.7,20419.71,37243.44,0.0,114.3,78.62,85.19,90.09,93.55,96.17,97.78,98.9,99.63,99.9,0.0,73368.09,8766.0,0.25,983590248.5,99.97,100.0,8781.0,702344.22,702344.22,79.1,111975.21,111975.21,76983.31,76983.31,2161.74,2161.74,45.89,73.98,86.55,92.15,95.36,97.67,99.05,99.64,99.9,42932.0,144137.9,8781.0,702344.22,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.35,14.7,15.6,16.7,17.2,18.3,21.1,0.67,70.05,6141.0 +209,measured,3C,1960.0,Lab,San Francisco,CAISO,7000,,1.43,788710795.5,99.17,8687.0,99.73,454790.25,454790.25,67.38,89789.48,90544.01,62977.99,63048.33,0.0,114.3,6.51,74.12,84.68,90.16,93.78,96.31,97.93,99.22,99.77,54859.46,93343.79,8760.0,0.5,1127211082.8,99.74,97.82,8570.0,591479.98,591479.98,87.63,128325.49,131185.48,118941.05,120987.54,0.0,282.82,28.4,49.78,74.58,87.07,93.71,97.16,99.04,99.75,99.97,51049.36,178633.68,8761.0,503804.91,36.1,15.04,14.7,2.8,10.0,11.7,12.2,12.8,13.6,14.7,15.6,16.7,17.2,18.3,21.1,1.3,97.01,8494.0 +210,measured,3C,1990.0,Lab/Office,San Francisco,CAISO,4000,,7.93,234634546.63,10.29,901.0,99.97,577071.12,577071.12,131.54,26784.77,260326.52,0.0,291133.64,0.0,2620.42,90.83,91.25,91.66,92.23,94.68,98.26,99.74,99.98,99.98,0.0,0.0,8757.0,0.04,1861604312.04,99.97,97.57,8544.0,720496.51,720496.51,164.24,212511.91,217809.78,191160.86,195322.92,0.0,2222.91,14.15,36.7,56.51,72.58,84.55,92.61,97.45,99.46,99.93,105845.28,301242.3,8757.0,720496.51,38.9,13.49,13.3,0.6,7.8,9.7,10.6,11.1,12.2,13.3,14.4,15.6,16.1,17.2,19.4,1.25,9.99,875.0 +211,measured,3C,2010.0,Tech HQ,San Francisco,CAISO,46000,,0.35,2582417457.52,100.0,4092.0,46.71,986129.34,986129.34,21.23,294796.51,294796.51,212361.22,212361.22,69100.5,69100.5,6.89,45.45,64.78,73.53,81.04,87.95,94.09,97.87,99.63,146879.99,413930.59,4092.0,0.74,909546365.6,46.71,0.0,0.0,539193.84,539193.84,11.61,103829.49,217213.85,0.0,217173.59,0.0,6347.05,53.47,58.99,65.52,75.66,88.0,94.09,97.07,98.95,99.78,0.0,212761.5,4092.0,416681.11,35.0,18.59,17.8,2.8,11.7,14.4,15.0,15.6,16.7,17.8,19.4,21.1,22.2,23.3,26.1,0.55,47.8,1956.0 +212,measured,3C,2020.0,Tech HQ,San Francisco,CAISO,70000,,0.34,7384106895.36,99.98,8528.0,97.37,2796141.93,2796141.93,40.13,842934.58,843132.26,703690.91,703761.25,0.0,58792.94,4.63,39.47,58.1,75.9,85.13,89.81,94.48,98.07,99.47,403123.33,1098993.64,8530.0,0.9,2562461069.62,94.11,95.63,7884.0,1286823.05,1286823.05,18.47,292518.39,305875.39,250128.47,257614.97,0.0,1926.21,9.81,52.04,78.53,90.15,94.77,97.09,98.59,99.44,99.83,184901.65,359522.0,8244.0,936041.39,35.0,15.74,15.6,1.4,8.3,10.6,11.7,12.8,13.9,15.6,16.7,18.3,19.4,20.6,23.9,0.46,95.61,7882.0 +213,measured,3C,2020.0,Medical Office,San Francisco,CAISO,17000,,1.44,3037928687.03,100.0,8760.0,100.0,1475566.08,1475566.08,86.89,346795.51,346795.51,285203.21,285203.21,15885.65,15885.65,20.08,52.25,75.72,86.11,91.43,94.76,96.86,98.61,99.6,169015.27,435190.9,8760.0,0.92,4392853350.26,99.2,100.0,8690.0,2055848.94,2055848.94,121.06,501467.28,501467.28,419890.06,419890.06,20949.69,20949.69,15.65,48.34,74.18,85.72,91.68,94.93,96.96,98.84,99.7,258602.8,627567.36,8690.0,483206.58,36.44,15.5,14.78,6.66,11.04,12.16,12.63,13.07,13.9,14.78,15.62,16.82,17.66,18.62,21.17,1.39,100.0,8690.0 diff --git a/layout/input.py b/layout/input.py index 8d63b47..f4d401f 100644 --- a/layout/input.py +++ b/layout/input.py @@ -104,11 +104,11 @@ def select_location(): return html.Div( [ dbc.Label( - "Building Location", + "Building Location (optional)", style={"fontWeight": "bold", "marginBottom": "10px"}, ), html.P( - "Select the building location. This will set the corresponding ASHRAE climate zone used for the analysis." + "Recommended. If skipped, location is inferred from the selected load. Sets ASHRAE climate zone and grid region for emissions." ), dcc.Dropdown( id="location-input", diff --git a/layout/shell.py b/layout/shell.py index 8fc33ad..25ddfa5 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -72,6 +72,7 @@ def build_shell(page_content): dcc.Store(id="equipment-scenario-group-store", storage_type="session", data="default"), dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), dcc.Store(id="results-ready-store", storage_type="session", data=False), + dcc.Store(id="results-calculating-store", storage_type="memory", data=False), dcc.Download(id="download-data"), ] diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 050739e..327767f 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -828,6 +828,15 @@ def run_loads_to_site( ) return no_update, [notification] + metadata = Metadata(**metadata_json) + if not metadata.base_gea_grid_region: + logger.warning("Calculation attempted without grid region") + notification = create_warning_notification( + "Missing Grid Region", + "Could not determine grid region. Please select a location or choose a load with a known city.", + ) + return no_update, [notification] + if not equipment_json: logger.warning("Calculation attempted without equipment data") notification = create_error_notification( @@ -852,7 +861,6 @@ def run_loads_to_site( folder = Path(f"/tmp/{session_data['session_id']}") folder.mkdir(parents=True, exist_ok=True) - metadata = Metadata(**metadata_json) equipment = EquipmentLibrary(**equipment_json) load_data = get_load_data(metadata) diff --git a/pages/loads_page.py b/pages/loads_page.py index 9e770f0..6edfe84 100644 --- a/pages/loads_page.py +++ b/pages/loads_page.py @@ -377,9 +377,10 @@ def _build_summary_payload(load_obj: "StandardLoad") -> dict: State("building-radio-group", "value"), State("metadata-store", "data"), State("session-store", "data"), + State("location-input", "value"), prevent_initial_call=True, ) -def confirm_selection(n_clicks, current_choice, metadata_data, session_data): +def confirm_selection(n_clicks, current_choice, metadata_data, session_data, selected_zip): """ Handle library selection confirm. - For simulated data: proceed directly (update metadata, close modal) @@ -418,6 +419,9 @@ def confirm_selection(n_clicks, current_choice, metadata_data, session_data): metadata_updates = {} load_updates = {} + location_explicit = bool(selected_zip) + location_fields = {"location", "ashrae_climate_zone"} + for key, value in building.items(): if key == "building_id": continue @@ -429,6 +433,8 @@ def confirm_selection(n_clicks, current_choice, metadata_data, session_data): if key in load_fields: load_updates[key] = value elif key in meta_fields and key != "load_data": + if location_explicit and key in location_fields: + continue # preserve explicit location selection metadata_updates[key] = value # type fixes @@ -453,10 +459,32 @@ def confirm_selection(n_clicks, current_choice, metadata_data, session_data): {**metadata.load_data.model_dump(), **load_updates} ) - # gea grid region - region = building.get("gea_grid_region") - if region: - metadata.set_gea_grid_region_for_all(region) + # gea grid region + climate zone output: infer from building metadata if no explicit location + if not location_explicit: + # Prefer pre-computed column in building metadata over city-based lookup + region = building.get("gea_grid_region") + if not region: + # Fallback: look up from locations.csv by city, preferring CA entries + building_city = building.get("location") + if building_city: + locs = get_locations_df() + all_matches = locs.loc[locs["city"] == building_city][ + ["state_id", "gea_grid_region", "ASHRAE", "ca_climate"] + ].drop_duplicates(subset=["state_id"]) + ca_matches = all_matches[all_matches["state_id"] == "CA"] + loc_row = ( + ca_matches.iloc[0] + if not ca_matches.empty + else (all_matches.iloc[0] if not all_matches.empty else None) + ) + if loc_row is not None: + region = loc_row["gea_grid_region"] + + if region: + metadata.set_gea_grid_region_for_all(region) + if metadata.climate_zone_output is None: + metadata.climate_zone_output = metadata.ashrae_climate_zone + logger.info(f"Inferred grid region from load: {building.get('location')} → {region}") # optional: path column in buildings_df if building.get("load_file_path"): diff --git a/pages/results_page.py b/pages/results_page.py index c086b5f..b151361 100644 --- a/pages/results_page.py +++ b/pages/results_page.py @@ -1,6 +1,7 @@ import contextlib import datetime import io +import time import zipfile from pathlib import Path @@ -8,11 +9,14 @@ import dash_mantine_components as dmc import pandas as pd import plotly.express as px -from dash import Input, Output, State, callback, dcc +from dash import Input, Output, State, callback, dcc, no_update from layout.charts import chart_tabs from layout.output import summary_project_info from src.config import URLS +from src.energy import loads_to_site_energy, site_to_source +from src.equipment import EquipmentLibrary +from src.loads import get_load_data from src.metadata import Metadata from src.visuals import ( plot_emission_scenarios_grouped, @@ -22,6 +26,11 @@ plot_scatter_temp_vs_variable, ) from utils.display_registry import format_emission_scenario_id +from utils.error_handling import ( + create_error_notification, + create_success_notification, + create_warning_notification, +) from utils.logging_config import get_logger logger = get_logger(__name__) @@ -39,10 +48,17 @@ def layout(): [ dmc.Paper( [ + dmc.LoadingOverlay( + id="results-loading-overlay", + visible=True, + overlayProps={"radius": "md", "blur": 10}, + zIndex=10, + ), chart_tabs(), ], p="md", radius="md", + pos="relative", ), ], span=12, @@ -110,7 +126,7 @@ def update_meter_plot( unit_mode, ): df = load_source_energy(session_data) - if df is None: + if df is None or not emission_scenarios or not equipment_scenarios: return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") # flags from toggles @@ -139,7 +155,7 @@ def update_meter_plot( ) def update_total_emissions_plot(session_data, equipment_scenarios, emission_scenario, unit_mode): df = load_source_energy(session_data) - if df is None: + if df is None or emission_scenario is None or not equipment_scenarios: return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") if isinstance(emission_scenario, str): @@ -158,7 +174,7 @@ def update_total_emissions_plot(session_data, equipment_scenarios, emission_scen ) def update_emissions_bar_plot(session_data, emission_scenarios, unit_mode, selected_equipment_ids): df = load_source_energy(session_data) - if df is None: + if df is None or not emission_scenarios: return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") # Use user-defined order from selected-equipment-store @@ -168,6 +184,9 @@ def update_emissions_bar_plot(session_data, emission_scenarios, unit_mode, selec else: equipment_scenarios = list(df_ids) + if not equipment_scenarios: + return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") + # Ensure emission_scenarios is a list if isinstance(emission_scenarios, str): emission_scenarios = [emission_scenarios] @@ -191,7 +210,7 @@ def update_emissions_heatmap( session_data, equipment_scenario, emission_scenario, emission_type, unit_mode ): df = load_source_energy(session_data) - if df is None: + if df is None or not equipment_scenario or not emission_scenario: return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") fig = plot_emissions_heatmap( @@ -223,7 +242,7 @@ def update_scatter_plot( unit_mode, ): df = load_source_energy(session_data) - if df is None: + if df is None or not equipment_scenarios or not emission_scenario: return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") frequency_value = frequency_value if frequency_value else "D" @@ -354,10 +373,12 @@ def smart_round(val): Output("scatter-equipment-scen-dropdown", "data"), Output("scatter-equipment-scen-dropdown", "value"), Input("session-store", "data"), + Input("results-ready-store", "data"), State("selected-equipment-store", "data"), # optional, keeps user ordering State("equipment-scenario-number-map", "data"), # display numbers (1-5) + prevent_initial_call=True, ) -def populate_equipment_dropdowns(session_data, selected_equipment_ids, number_map): +def populate_equipment_dropdowns(session_data, _results_ready, selected_equipment_ids, number_map): """ Populate all equipment scenario dropdowns with only the scenarios that were actually computed for this session. @@ -442,6 +463,7 @@ def eq_sort_key(scen_id): Output("scatter-emission-scen-dropdown", "data"), Output("scatter-emission-scen-dropdown", "value"), Input("session-store", "data"), + Input("results-ready-store", "data"), State("selected-emissions-store", "data"), # preserves user ordering # previous values to infer single vs multi & keep user choices where possible State("emission-scen-dropdown", "value"), @@ -449,9 +471,11 @@ def eq_sort_key(scen_id): State("emission-em-scen-dropdown", "value"), State("heatmap-emission-scen-dropdown", "value"), State("scatter-emission-scen-dropdown", "value"), + prevent_initial_call=True, ) def populate_emission_dropdowns( session_data, + _results_ready, selected_emission_ids, prev_emission_scen, prev_total_em, @@ -558,3 +582,98 @@ def pick_value(prev_val): options, scatter_em_value, ) + + +@callback( + Output("results-ready-store", "data", allow_duplicate=True), + Output("results-calculating-store", "data", allow_duplicate=True), + Output("notification-container", "sendNotifications", allow_duplicate=True), + Input("url", "pathname"), + State("metadata-store", "data"), + State("equipment-store", "data"), + State("selected-equipment-store", "data"), + State("selected-emissions-store", "data"), + State("session-store", "data"), + prevent_initial_call=True, +) +def auto_calculate_on_results( + pathname, + metadata_json, + equipment_json, + selected_scenarios, + selected_emission_ids, + session_data, +): + """Auto-trigger full site→source calculation when the user navigates to the Results tab.""" + if pathname != URLS.RESULTS.value: + raise dash.exceptions.PreventUpdate + + if not metadata_json: + return no_update, False, no_update + + metadata = Metadata(**metadata_json) + + if not metadata.load_data.load_type: + return no_update, False, no_update + + if not metadata.base_gea_grid_region: + notification = create_warning_notification( + "Missing Grid Region", + "Could not determine grid region. Please select a location on the Loads page.", + ) + return no_update, False, [notification] + + if not equipment_json or not selected_scenarios or not session_data: + return no_update, False, no_update + + try: + folder = Path(f"/tmp/{session_data['session_id']}") + folder.mkdir(parents=True, exist_ok=True) + + equipment = EquipmentLibrary(**equipment_json) + load_data = get_load_data(metadata) + + # Step 1: loads → site energy + site_energy = loads_to_site_energy( + load_data, + equipment, + scenario_ids=selected_scenarios, + detail=True, + ) + + # Step 2: site → source emissions + if selected_emission_ids: + metadata.emission_settings = [ + scen + for scen in metadata.emission_settings + if scen.em_scen_id in selected_emission_ids + ] + source_energy = site_to_source(site_energy, metadata=metadata) + + source_path = folder / "source_energy.pkl" + source_energy.to_pickle(source_path) + logger.info(f"Auto-calculated source energy on Results navigation: {source_path}") + + success = create_success_notification( + "Calculation Complete", + "Source emissions calculation finished successfully.", + ) + return time.time(), False, [success] + + except Exception as e: + logger.exception(f"Auto-calculation error on Results navigation: {e}") + notification = create_error_notification( + "Calculation Error", + "Automatic calculation failed. Please check your load and settings.", + ) + return no_update, False, [notification] + + +@callback( + Output("results-loading-overlay", "visible"), + Input("results-calculating-store", "data"), + prevent_initial_call=True, +) +def control_loading_overlay(is_calculating): + """Hide the loading overlay once calculation completes.""" + return bool(is_calculating) From 0df32e2ac818a40a63ed234af34bacd6b461454a Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 12:25:03 -0700 Subject: [PATCH 20/48] fix: adjust location selection UI --- layout/input.py | 23 +++++++++++++++++++---- pages/loads_page.py | 20 +++++++++++++------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/layout/input.py b/layout/input.py index f4d401f..8c175f3 100644 --- a/layout/input.py +++ b/layout/input.py @@ -104,11 +104,23 @@ def select_location(): return html.Div( [ dbc.Label( - "Building Location (optional)", + [ + "Building Location ", + html.Span( + "(OPTIONAL)", + style={ + "fontSize": "0.75em", + "color": "#6c757d", + "fontWeight": "normal", + "marginLeft": "5px", + }, + ), + ], style={"fontWeight": "bold", "marginBottom": "10px"}, ), + html.Br(), html.P( - "Recommended. If skipped, location is inferred from the selected load. Sets ASHRAE climate zone and grid region for emissions." + "Overwrites GEA grid region for emissions. If skipped, information is inferred from the selected load data." ), dcc.Dropdown( id="location-input", @@ -129,7 +141,7 @@ def select_load_type(): style={"fontWeight": "bold", "marginBottom": "10px"}, ), html.Br(), - html.P("Select the type of load data you want to use for analysis."), + html.P("Select the load dataset you want to use for analysis."), dbc.Accordion( [ dbc.AccordionItem( @@ -1132,7 +1144,10 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un ("emission_type", "Emission Type"), ("shortrun_weighting", "Short-run weighting"), ("annual_refrig_leakage_percent", "Refrigerant leakage (frac)"), - ("ng_emission_rate_gCO2e_per_kWh", f"Gas emissions rate ({ng_emission_rate_unit})"), + ( + "ng_emission_rate_gCO2e_per_kWh", + f"Gas emissions rate ({ng_emission_rate_unit})", + ), ("year", "Year"), ] diff --git a/pages/loads_page.py b/pages/loads_page.py index 6edfe84..0b6e9e4 100644 --- a/pages/loads_page.py +++ b/pages/loads_page.py @@ -18,7 +18,7 @@ build_completeness_modal, build_completeness_summary, build_scale_load_modal, - get_load_index, # slider min/max values in base SI units (lazy-loaded) + get_load_index, modal_load_data_selection, select_load_type, select_location, @@ -76,8 +76,6 @@ def layout(): href="https://github.com/CenterForTheBuiltEnvironment/decarb-tool", ), html.Hr(), - select_location(), - html.Hr(), select_load_type(), modal_load_data_selection(buildings_df=get_buildings_df()), build_completeness_modal(), @@ -143,6 +141,8 @@ def layout(): ), ], ), + html.Hr(), + select_location(), ], bg="gray.0", radius="md", @@ -1615,7 +1615,11 @@ def update_scale_preview(method, target_value, metadata_data, unit_mode): target_si = target_value * ton_to_W if unit_mode == "IP" else target_value * 1000 if not ref_si or ref_si <= 0: - return "", label, f"Reference value for '{method}' not available in library data." + return ( + "", + label, + f"Reference value for '{method}' not available in library data.", + ) scale_factor = target_si / ref_si if scale_factor <= 0: @@ -1995,9 +1999,11 @@ def apply_base_load(n_clicks, method, apply_to, value, metadata_data, load_data_ summary_payload = _build_summary_payload(modified_load) - apply_to_label = {"heating": "heating", "cooling": "cooling", "both": "heating + cooling"}[ - apply_to - ] + apply_to_label = { + "heating": "heating", + "cooling": "cooling", + "both": "heating + cooling", + }[apply_to] method_label = "floor" if method == "floor" else "offset" value_display = f"{value:,.0f} BTU/h" if unit_mode == "IP" else f"{value:.1f} kW" From 80b7ecd1a16b7c983b0a64ea6bd91c0ff0b040e0 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 12:45:29 -0700 Subject: [PATCH 21/48] fix: adjust auto calc workflow --- layout/shell.py | 4 ++ pages/emissions_page.py | 85 +++++++---------------------------------- 2 files changed, 18 insertions(+), 71 deletions(-) diff --git a/layout/shell.py b/layout/shell.py index 25ddfa5..59dfe3d 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -73,6 +73,7 @@ def build_shell(page_content): dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), dcc.Store(id="results-ready-store", storage_type="session", data=False), dcc.Store(id="results-calculating-store", storage_type="memory", data=False), + dcc.Location(id="nav-location", refresh=True), dcc.Download(id="download-data"), ] @@ -157,6 +158,9 @@ def build_navbar_content(): href=page["path"], id={"type": "navbar-link", "path": page["path"]}, active=False, # will be controlled by callback + rightSection=DashIconify(icon="ic:baseline-autorenew", width=16) + if page["path"] == "/results" + else None, ) for page in pages ] diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 327767f..33c94b3 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -19,9 +19,7 @@ from layout.input import add_emission_modal, build_emissions_table, edit_emission_modal from src.config import URLS, EmissionScenarioDefaults -from src.energy import loads_to_site_energy, site_to_source -from src.equipment import EquipmentLibrary -from src.loads import get_load_data +from src.energy import site_to_source from src.metadata import Metadata from utils.error_handling import ( create_error_notification, @@ -800,29 +798,19 @@ def update_ng_emissions_rate_label(unit_mode): @callback( - Output("site-energy-store", "data"), + Output("nav-location", "pathname"), Output("notification-container", "sendNotifications", allow_duplicate=True), Input("button-calculate", "n_clicks"), State("metadata-store", "data"), State("equipment-store", "data"), State("selected-equipment-store", "data"), - State("session-store", "data"), prevent_initial_call=True, ) -def run_loads_to_site( - n_clicks, - metadata_json, - equipment_json, - selected_scenarios, - session_data, -): - # --- Guard clauses (no notification needed, just prevent update) --- +def navigate_to_results(n_clicks, metadata_json, equipment_json, selected_scenarios): if not n_clicks: raise dash.exceptions.PreventUpdate - # --- Validation with user feedback --- if not metadata_json: - logger.warning("Calculation attempted without load selection") notification = create_warning_notification( "Missing Selection", "Please select a load dataset on the Loads page first." ) @@ -830,7 +818,6 @@ def run_loads_to_site( metadata = Metadata(**metadata_json) if not metadata.base_gea_grid_region: - logger.warning("Calculation attempted without grid region") notification = create_warning_notification( "Missing Grid Region", "Could not determine grid region. Please select a location or choose a load with a known city.", @@ -838,7 +825,6 @@ def run_loads_to_site( return no_update, [notification] if not equipment_json: - logger.warning("Calculation attempted without equipment data") notification = create_error_notification( "Missing Data", "No equipment library data available. Please refresh the page.", @@ -846,67 +832,19 @@ def run_loads_to_site( return no_update, [notification] if not selected_scenarios: - logger.warning("Calculation attempted without equipment scenarios") notification = create_warning_notification( "No Scenarios Selected", "Please select at least one equipment scenario." ) return no_update, [notification] - # --- Main calculation with error handling --- - try: - logger.info( - f"Starting site energy calculation for following eq scenarios {selected_scenarios}" - ) - - folder = Path(f"/tmp/{session_data['session_id']}") - folder.mkdir(parents=True, exist_ok=True) - - equipment = EquipmentLibrary(**equipment_json) - - load_data = get_load_data(metadata) - - site_energy = loads_to_site_energy( - load_data, - equipment, - scenario_ids=selected_scenarios, - detail=True, - ) - - site_path = folder / "site_energy.pkl" - site_energy.to_pickle(site_path) - logger.info(f"Saved site energy to: {site_path}") - - return str(site_path), no_update - - except ValueError as e: - logger.error(f"Calculation validation error: {e}") - notification = create_error_notification( - "Calculation Error", - str(e), # ValueError messages from energy.py - ) - return no_update, [notification] - - except FileNotFoundError as e: - logger.error(f"Load data file not found: {e}") - notification = create_error_notification( - "Data Not Found", - "Could not find load data for this building. Please re-select on Loads page.", - ) - return no_update, [notification] - - except Exception as e: - logger.exception(f"Unexpected calculation error: {e}") - notification = create_error_notification( - "Unexpected Error", - "Calculation failed. Please make sure have a selected a load dataset and at least one equipment and emission scenario.", - ) - return no_update, [notification] + return URLS.RESULTS.value, no_update @callback( Output("source-energy-store", "children"), Output("notification-container", "sendNotifications", allow_duplicate=True), Output("results-ready-store", "data"), + Output("nav-location", "pathname", allow_duplicate=True), Input("site-energy-store", "data"), State("metadata-store", "data"), State("selected-emissions-store", "data"), @@ -921,7 +859,7 @@ def run_site_to_source(site_energy_path, metadata_json, selected_emission_ids, s notification = create_warning_notification( "No Emission Scenarios", "Please select at least one emission scenario." ) - return no_update, [notification], no_update + return no_update, [notification], no_update, no_update try: logger.info( @@ -955,19 +893,24 @@ def run_site_to_source(site_energy_path, metadata_json, selected_emission_ids, s "Source emissions calculation finished successfully.", ) - return dcc.Store(id="source-energy-store", data=str(source_path)), [success], True + return ( + dcc.Store(id="source-energy-store", data=str(source_path)), + [success], + True, + URLS.RESULTS.value, + ) except ValueError as e: logger.error(f"Emissions calculation error: {e}") notification = create_error_notification("Calculation Error", str(e)) - return no_update, [notification], no_update + return no_update, [notification], no_update, no_update except Exception as e: logger.exception(f"Unexpected emissions error: {e}") notification = create_error_notification( "Unexpected Error", "Emissions calculation failed." ) - return no_update, [notification], no_update + return no_update, [notification], no_update, no_update @callback( From a80d65748a0c37f028cf1c77abd9587832109093 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 15:08:04 -0700 Subject: [PATCH 22/48] feat: add metadata export v1 --- pages/results_page.py | 46 ++++++++- src/export.py | 231 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 src/export.py diff --git a/pages/results_page.py b/pages/results_page.py index b151361..7e337e5 100644 --- a/pages/results_page.py +++ b/pages/results_page.py @@ -293,9 +293,21 @@ def show_download_notification(n_clicks, unit_mode): Input("download-button", "n_clicks"), State("session-store", "data"), State("unit-toggle", "value"), + State("metadata-store", "data"), + State("equipment-store", "data"), + State("selected-equipment-store", "data"), + State("selected-emissions-store", "data"), prevent_initial_call=True, ) -def download_results(n_clicks, session_data, unit_mode): +def download_results( + n_clicks, + session_data, + unit_mode, + metadata_json, + equipment_json, + selected_eq_ids, + selected_em_ids, +): """Download the entire results dataframe as a .csv file with unit conversion.""" import numpy as np @@ -354,11 +366,43 @@ def smart_round(val): buf = io.BytesIO() with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf: zf.writestr(f"results_{timestamp}.csv", csv_string) + _add_metadata_files( + zf, metadata_json, equipment_json, selected_eq_ids, selected_em_ids, unit_mode + ) buf.seek(0) return dcc.send_bytes(buf.getvalue(), f"results_{timestamp}.zip") +def _add_metadata_files( + zf, metadata_json, equipment_json, selected_eq_ids, selected_em_ids, unit_mode +): + import json as _json + + from src.equipment import EquipmentLibrary + from src.export import build_metadata_summary, build_settings_bundle + from src.metadata import Metadata + + if not metadata_json or not equipment_json: + return + + try: + metadata = Metadata(**metadata_json) + equipment_library = EquipmentLibrary(**equipment_json) + selected_eq = list(selected_eq_ids) if selected_eq_ids else [] + selected_em = list(selected_em_ids) if selected_em_ids else [] + + summary = build_metadata_summary( + metadata, equipment_library, selected_eq, selected_em, unit_mode + ) + zf.writestr("settings_summary.txt", summary) + + bundle = build_settings_bundle(metadata, equipment_library, selected_eq, selected_em) + zf.writestr("settings.json", _json.dumps(bundle, indent=2, default=str)) + except Exception: + pass # never block the download for a metadata failure + + @callback( # total-equipment-scen-dropdown (multi) Output("total-equipment-scen-dropdown", "data"), diff --git a/src/export.py b/src/export.py new file mode 100644 index 0000000..a27d135 --- /dev/null +++ b/src/export.py @@ -0,0 +1,231 @@ +import datetime + +from src.equipment import EquipmentLibrary +from src.metadata import Metadata +from utils.units import UNIT_MAP + + +def _perf_model_label(model: str | None) -> str: + labels = { + "fixed_COP": "Fixed COP", + "interpolate_HHWST": "Interpolate HHWST", + "interpolate_HHWST_fixed": "Interpolate HHWST (fixed)", + "interpolate_HHWST_reset": "Interpolate HHWST (reset)", + "performance_curves": "Performance curves", + } + return labels.get(model, model or "N/A") + + +def _sizing_label(mode: str | None) -> str: + labels = { + "integer_sizing_peak_load": "Integer sizing (peak load)", + "fractional_sizing_peak_load": "Fractional sizing (peak load)", + "fixed_num_units": "Fixed number of units", + } + return labels.get(mode, mode or "N/A") + + +def _eq_display(eq_id: str | None, library: EquipmentLibrary) -> str: + if not eq_id: + return "None" + try: + eq = library.get_equipment(eq_id) + mfr = f"{eq.eq_manufacturer} " if eq.eq_manufacturer else "" + return f"{mfr}{eq.model}" + except (KeyError, AttributeError): + return eq_id + + +def _eq_capacity(eq_id: str | None, library: EquipmentLibrary, unit_mode: str) -> str: + if not eq_id: + return "N/A" + try: + eq = library.get_equipment(eq_id) + cap = eq.nominal_capacity_W or eq.capacity_W + if cap is None: + return "N/A" + func = UNIT_MAP["capacity"][unit_mode]["func"] + unit = UNIT_MAP["capacity"][unit_mode]["unit"] + return f"{func(cap):,.0f} {unit}" + except (KeyError, AttributeError): + return "N/A" + + +def _section(title: str) -> str: + bar = "━" * 50 + return f"\n{bar}\n {title}\n{bar}\n" + + +def build_metadata_summary( + metadata: Metadata, + equipment_library: EquipmentLibrary, + selected_eq_ids: list[str], + selected_em_ids: list[str], + unit_mode: str = "SI", +) -> str: + unit_mode = unit_mode or "SI" + energy_func = UNIT_MAP["energy"][unit_mode]["func"] + energy_unit = UNIT_MAP["energy"][unit_mode]["unit"] + power_func = UNIT_MAP["power"][unit_mode]["func"] + power_unit = UNIT_MAP["power"][unit_mode]["unit"] + area_func = UNIT_MAP["area"][unit_mode]["func"] + area_unit = UNIT_MAP["area"][unit_mode]["unit"] + temp_func = UNIT_MAP["temperature"][unit_mode]["func"] + temp_unit = UNIT_MAP["temperature"][unit_mode]["unit"] + unit_label = "SI (metric)" if unit_mode == "SI" else "IP (imperial)" + + now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + lines = [ + "=== DECARB TOOL — ANALYSIS SETTINGS SUMMARY ===", + f"Exported: {now}", + f"Units: {unit_label}", + ] + + def row(label, value): + return f" {label:<32}{value}" + + # ── Building & Load ──────────────────────────────────── + lines.append(_section("BUILDING & LOAD PROFILE")) + ld = metadata.load_data + + lines.append(row("Building ID:", metadata.building_id or "N/A")) + lines.append(row("Location:", metadata.location or "N/A")) + lines.append(row("Building Type:", metadata.building_type or "N/A")) + lines.append(row("Vintage:", str(metadata.vintage) if metadata.vintage else "N/A")) + lines.append(row("Climate Zone (ASHRAE):", metadata.ashrae_climate_zone or "N/A")) + + if metadata.area_sqm is not None: + lines.append(row(f"Floor Area [{area_unit}]:", f"{area_func(metadata.area_sqm):,.0f}")) + else: + lines.append(row("Floor Area:", "N/A")) + + lines.append(row("Load Source:", ld.load_type or "N/A")) + lines.append(row("Load Reference:", ld.load_source_ref or "N/A")) + lines.append("") + + if ld.hhw_annual_load is not None: + lines.append( + row(f"Annual Heating Load [{energy_unit}]:", f"{energy_func(ld.hhw_annual_load):,.0f}") + ) + if ld.hhw_max_load is not None: + lines.append( + row(f"Peak Heating Load [{power_unit}]:", f"{power_func(ld.hhw_max_load):,.1f}") + ) + if ld.chw_annual_load is not None: + lines.append( + row(f"Annual Cooling Load [{energy_unit}]:", f"{energy_func(ld.chw_annual_load):,.0f}") + ) + if ld.chw_max_load is not None: + lines.append( + row(f"Peak Cooling Load [{power_unit}]:", f"{power_func(ld.chw_max_load):,.1f}") + ) + if ld.heat_recovery_heating_fraction is not None: + lines.append(row("Heat Recovery Fraction:", f"{ld.heat_recovery_heating_fraction:.2f}")) + + # ── Equipment Scenarios ──────────────────────────────── + lines.append(_section("EQUIPMENT SCENARIOS")) + + selected_eq_ids = list(selected_eq_ids) if selected_eq_ids else [] + selected_scenarios = [ + s for s in equipment_library.equipment_scenarios if s.eq_scen_id in selected_eq_ids + ] + + if not selected_scenarios: + lines.append(" No equipment scenarios selected.") + else: + for i, scen in enumerate(selected_scenarios, 1): + lines.append(f" [{i}] {scen.eq_scen_name}") + + if scen.hr_wwhp: + lines.append(" Heat Recovery (WWHP):") + lines.append( + f" Model: {_eq_display(scen.hr_wwhp, equipment_library)}" + ) + lines.append( + f" Capacity: {_eq_capacity(scen.hr_wwhp, equipment_library, unit_mode)}" + ) + lines.append( + f" Performance: {_perf_model_label(scen.hr_wwhp_performance_model)}" + ) + if scen.hr_wwhp_h_supply_t is not None: + lines.append( + f" Supply Temp: {temp_func(scen.hr_wwhp_h_supply_t):.1f} {temp_unit}" + ) + + if scen.awhp: + lines.append(" Air-to-Water HP (AWHP):") + lines.append(f" Model: {_eq_display(scen.awhp, equipment_library)}") + lines.append( + f" Capacity: {_eq_capacity(scen.awhp, equipment_library, unit_mode)}" + ) + lines.append( + f" Performance: {_perf_model_label(scen.awhp_performance_model)}" + ) + if scen.awhp_h_supply_t is not None: + lines.append( + f" Supply Temp: {temp_func(scen.awhp_h_supply_t):.1f} {temp_unit}" + ) + lines.append(f" Sizing Mode: {_sizing_label(scen.awhp_sizing_mode)}") + lines.append( + f" Cooling: {'Enabled' if scen.awhp_use_cooling else 'Disabled'}" + ) + + backup = ( + _eq_display(scen.backup_heating, equipment_library) + if scen.backup_heating + else "None" + ) + chiller = _eq_display(scen.chiller, equipment_library) if scen.chiller else "None" + lines.append(f" Backup Heating: {backup}") + lines.append(f" Chiller: {chiller}") + + if i < len(selected_scenarios): + lines.append("") + + # ── Emission Scenarios ───────────────────────────────── + lines.append(_section("EMISSION SCENARIOS")) + + selected_em_ids = list(selected_em_ids) if selected_em_ids else [] + selected_em = [s for s in metadata.emission_settings if s.em_scen_id in selected_em_ids] + + if not selected_em: + lines.append(" No emission scenarios selected.") + else: + for i, scen in enumerate(selected_em, 1): + lines.append(f" [{i}] {scen.em_scen_name}") + lines.append(f" Grid Scenario: {scen.grid_scenario}") + lines.append(f" Grid Region: {scen.gea_grid_region or 'N/A'}") + lines.append(f" Year: {scen.year}") + lines.append(f" Emission Type: {scen.emission_type}") + lines.append( + f" SR/LR Weighting: {scen.shortrun_weighting * 100:.0f} % short-run" + ) + lines.append( + f" Refrig. Leakage: {scen.annual_refrig_leakage_percent:.2f} % / year" + ) + lines.append( + f" NG Emission Rate: {scen.ng_emission_rate_gCO2e_per_kWh:.1f} g CO₂e / kWh" + ) + + if i < len(selected_em): + lines.append("") + + lines.append("") + return "\n".join(lines) + + +def build_settings_bundle( + metadata: Metadata, + equipment_library: EquipmentLibrary, + selected_eq_ids: list[str], + selected_em_ids: list[str], +) -> dict: + return { + "format_version": "1.0", + "tool": "decarb-tool", + "exported_at": datetime.datetime.now().isoformat(), + "metadata": metadata.model_dump(), + "equipment_library": equipment_library.model_dump(), + "selected_equipment_scenario_ids": list(selected_eq_ids) if selected_eq_ids else [], + "selected_emission_scenario_ids": list(selected_em_ids) if selected_em_ids else [], + } From eb7d6e5b4ddeed0bcaffdeae1c1000489e27fb2c Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 8 Sep 2026 16:25:51 -0700 Subject: [PATCH 23/48] feat: add free text search + sorting to load selection table --- layout/input.py | 82 +++++++++++++++++++++------ layout/shell.py | 5 ++ pages/loads_page.py | 133 +++++++++++++++++++++++--------------------- 3 files changed, 139 insertions(+), 81 deletions(-) diff --git a/layout/input.py b/layout/input.py index 8c175f3..e1e3517 100644 --- a/layout/input.py +++ b/layout/input.py @@ -184,7 +184,13 @@ def select_load_type(): ) -def build_building_table(buildings_data, selected_id=None, unit_mode: str = "SI"): +def build_building_table( + buildings_data, + selected_id=None, + unit_mode: str = "SI", + sort_col: str = "building_id", + sort_dir: str = "asc", +): """ Build a table from a DataFrame with predefined columns. Only displays columns that exist in the data. @@ -279,15 +285,33 @@ def get_header_label(col_name: str, base_label: str) -> str: body_rows.append(dmc.TableTr(cells)) - # Build header (use normal case, not uppercase) - header_style = {"textTransform": "none", "fontWeight": 500} - header_cells = [dmc.TableTh("", style=header_style)] # radio column - header_cells.extend( - [ - dmc.TableTh(get_header_label(col, label), style=header_style) - for col, label in available_columns - ] - ) + # Build header with clickable sort indicators + def make_sort_header(col_name, label): + is_active = col_name == sort_col + if is_active: + icon = "mdi:arrow-up" if sort_dir == "asc" else "mdi:arrow-down" + icon_color = "blue" + else: + icon = "mdi:unfold-more-horizontal" + icon_color = "gray" + return dmc.TableTh( + dmc.UnstyledButton( + dmc.Group( + [ + dmc.Text(get_header_label(col_name, label), size="sm", fw=500), + DashIconify(icon=icon, width=14, color=icon_color), + ], + gap=4, + wrap="nowrap", + ), + id={"type": "building-sort-th", "col": col_name}, + style={"cursor": "pointer", "userSelect": "none", "width": "100%"}, + ), + style={"textTransform": "none"}, + ) + + header_cells = [dmc.TableTh("", style={"textTransform": "none"})] # radio column + header_cells.extend([make_sort_header(col, label) for col, label in available_columns]) header = dmc.TableThead(dmc.TableTr(header_cells)) body = dmc.TableTbody(body_rows) @@ -326,16 +350,33 @@ def modal_load_data_selection(buildings_df: pd.DataFrame): return dmc.Modal( title="Load Data Library", children=[ - dmc.Text( - "Select simulated or measured load data from library.", - fw=400, - size="sm", + dmc.TextInput( + id="building-search-input", + placeholder="Search by location, building type, climate zone, vintage…", + leftSection=DashIconify(icon="mdi:magnify", width=20), + debounce=300, + size="md", + variant="filled", + radius="lg", + style={"width": "100%"}, + styles={"input": {"backgroundColor": "rgba(34, 139, 230, 0.06)"}}, ), dmc.Space(h="md"), # ------------------ FILTER CONTROLS ---------------------------- - dmc.Stack( - gap="xl", + dmc.Paper( + withBorder=False, + radius="md", + p="md", + shadow="xs", children=[ + dmc.Text( + "Filters", + size="xs", + fw=600, + c="dimmed", + tt="uppercase", + mb="sm", + ), dmc.Group( align="center", justify="space-between", @@ -448,7 +489,14 @@ def modal_load_data_selection(buildings_df: pd.DataFrame): ], ), dmc.Space(h="xl"), - # ------------------ TABLE + CONFIRM ---------------------------- + # ------------------ TABLE + CONFIRM --------------------------- + dmc.Text( + id="building-table-result-count", + children="", + size="sm", + c="dimmed", + mb="xs", + ), html.Div( id="building-table-container", children=build_building_table(buildings_df, selected_id=None), diff --git a/layout/shell.py b/layout/shell.py index 59dfe3d..b858bb0 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -68,6 +68,11 @@ def build_shell(page_content): dcc.Store(id="pending-load-data-store", storage_type="session", data=None), dcc.Store(id="scale-info-store", storage_type="session", data=None), dcc.Store(id="base-load-info-store", storage_type="session", data=None), + dcc.Store( + id="building-table-sort-store", + storage_type="memory", + data={"col": "building_id", "dir": "asc"}, + ), # Scenario group selections (persisted across page navigation) dcc.Store(id="equipment-scenario-group-store", storage_type="session", data="default"), dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), diff --git a/pages/loads_page.py b/pages/loads_page.py index 0b6e9e4..14b8541 100644 --- a/pages/loads_page.py +++ b/pages/loads_page.py @@ -9,7 +9,7 @@ import dash_mantine_components as dmc import numpy as np import pandas as pd -from dash import Input, Output, State, callback, ctx, dcc, html, no_update +from dash import ALL, Input, Output, State, callback, ctx, dcc, html, no_update from dash_iconify import DashIconify from layout.input import ( @@ -950,11 +950,34 @@ def process_upload(contents, filename, metadata_data, session_data): return alert, no_update, no_update, no_update, None # Clear upload contents +# ------------------------------------------------------------------- +# Callback: handle column header clicks → update sort store +# ------------------------------------------------------------------- +@callback( + Output("building-table-sort-store", "data"), + Input({"type": "building-sort-th", "col": ALL}, "n_clicks"), + State("building-table-sort-store", "data"), + prevent_initial_call=True, +) +def handle_sort_header_click(n_clicks_list, current_sort): + if not any(n for n in n_clicks_list if n): + raise dash.exceptions.PreventUpdate + triggered = ctx.triggered_id + if not triggered: + raise dash.exceptions.PreventUpdate + clicked_col = triggered["col"] + current_col = (current_sort or {}).get("col", "building_type") + current_dir = (current_sort or {}).get("dir", "asc") + new_dir = "desc" if clicked_col == current_col and current_dir == "asc" else "asc" + return {"col": clicked_col, "dir": new_dir} + + # ------------------------------------------------------------------- # Callback: filter and rebuild table # ------------------------------------------------------------------- @callback( Output("building-table-container", "children"), + Output("building-table-result-count", "children"), [ Input("load-type-filter", "value"), Input("climate-filter", "value"), @@ -962,9 +985,9 @@ def process_upload(contents, filename, metadata_data, session_data): Input("area-range-slider", "value"), Input("hhw-range-slider", "value"), Input("chw-range-slider", "value"), - # Input("temp-range-slider", "value"), - Input("metadata-store", "data"), # re-sort when metadata changes - Input("unit-toggle", "value"), # unit mode for table display + Input("building-search-input", "value"), + Input("building-table-sort-store", "data"), + Input("unit-toggle", "value"), ], State("building-radio-group", "value"), ) @@ -975,8 +998,8 @@ def update_table( area_range, hhw_range, chw_range, - # temp_range, - metadata_data, + search_text, + sort_data, unit_mode, current_choice, ): @@ -1026,8 +1049,12 @@ def update_table( else: df = buildings.copy() + total = len(buildings) + if df.empty: - return build_building_table(df, selected_id=None, unit_mode=unit_mode) + return build_building_table( + df, selected_id=None, unit_mode=unit_mode + ), f"0 of {total} buildings" # ----------------------------- # 1) Additional filters @@ -1068,68 +1095,43 @@ def update_table( cmin, cmax = chw_range df = df[df["chw_max_load"].between(cmin, cmax)] + # ----------------------------- + # 2) Free-text search + # ----------------------------- + _SEARCH_COLS = ["building_id", "location", "building_type", "vintage", "ashrae_climate_zone"] + if search_text and search_text.strip(): + needle = search_text.strip().lower() + cols_present = [c for c in _SEARCH_COLS if c in df.columns] + mask = ( + df[cols_present] + .apply( + lambda col: col.astype(str).str.lower().str.contains(needle, regex=False, na=False) + ) + .any(axis=1) + ) + df = df[mask] + if df.empty: - return build_building_table(df, selected_id=None, unit_mode=unit_mode) + return build_building_table( + df, selected_id=None, unit_mode=unit_mode + ), f"0 of {total} buildings" # ----------------------------- - # 2) Metadata-based priority sort (unchanged) + # 3) Column sort (replaces location priority sort) # ----------------------------- - meta_location = None - meta_climate = None - if metadata_data: - meta_location = metadata_data.get("location") - meta_climate = metadata_data.get("ashrae_climate_zone") - - # detect location column - loc_col = None - for cand in ("location", "city"): - if cand in df.columns: - loc_col = cand - break - - # detect climate column - clim_col = None - for cand in ("ashrae_climate_zone", "climate"): - if cand in df.columns: - clim_col = cand - break - - priority_col_added = False - - def apply_priority(mask_series): - nonlocal df, priority_col_added - df["__priority"] = 1 - df.loc[mask_series, "__priority"] = 0 - priority_col_added = True - - if loc_col and clim_col and meta_location and meta_climate: - # Step 1: exact match on BOTH location + climate - mask_both = (df[loc_col] == meta_location) & (df[clim_col] == meta_climate) - if mask_both.any(): - apply_priority(mask_both) - else: - # Step 2: same climate zone only - if meta_climate: - mask_climate = df[clim_col] == meta_climate - if mask_climate.any(): - apply_priority(mask_climate) - elif clim_col and meta_climate: - mask_climate = df[clim_col] == meta_climate - if mask_climate.any(): - apply_priority(mask_climate) - - # Step 3: if no matches, leave df order as-is - if priority_col_added: - sort_cols = ["__priority"] - if "building_type" in df.columns: - sort_cols.append("building_type") - if "building_id" in df.columns: - sort_cols.append("building_id") - - df = df.sort_values(sort_cols).drop(columns="__priority") + sort_col = (sort_data or {}).get("col", "building_id") + sort_dir = (sort_data or {}).get("dir", "asc") + tie_break = [sort_col] + ( + ["building_id"] if sort_col != "building_id" and "building_id" in df.columns else [] + ) + valid_cols = [c for c in tie_break if c in df.columns] + if valid_cols: + df = df.sort_values( + valid_cols, ascending=[sort_dir == "asc"] + [True] * (len(valid_cols) - 1) + ) # ----------------------------- - # 3) Preserve selection if still visible + # 4) Preserve selection if still visible # ----------------------------- selected_id = None if "building_id" in df.columns: @@ -1137,7 +1139,10 @@ def apply_priority(mask_series): if current_choice is not None and str(current_choice) in visible_ids: selected_id = current_choice - return build_building_table(df, selected_id, unit_mode=unit_mode) + result_count = f"{len(df)} of {total} buildings" + return build_building_table( + df, selected_id, unit_mode=unit_mode, sort_col=sort_col, sort_dir=sort_dir + ), result_count # ------------------------------------------------------------------- From 2793c95b5c7504457ffb1eee192236e398e47d6c Mon Sep 17 00:00:00 2001 From: urwahah Date: Tue, 8 Sep 2026 20:06:28 -0700 Subject: [PATCH 24/48] revise emission source options, remove shortrun weighting input --- data/input/metadata_index.json | 6 +++-- layout/input.py | 8 ------ pages/emissions_page.py | 47 +++++++++++----------------------- src/config.py | 4 +-- src/emissions.py | 1 - src/energy.py | 14 +++++++--- src/metadata.py | 9 +++---- tests/conftest.py | 3 +-- 8 files changed, 34 insertions(+), 58 deletions(-) diff --git a/data/input/metadata_index.json b/data/input/metadata_index.json index d3c3ddf..cc1b7db 100644 --- a/data/input/metadata_index.json +++ b/data/input/metadata_index.json @@ -64,8 +64,10 @@ }, "emissions": { "elec_emission_source" : [ - "Marginal", - "Average" + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + "Average (Cambium)", + "Average (User-provided)" ], "year": [ 2025, diff --git a/layout/input.py b/layout/input.py index 3b3b2b1..6106406 100644 --- a/layout/input.py +++ b/layout/input.py @@ -1137,7 +1137,6 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un ("grid_scenario", "Grid Scenario"), ("gea_grid_region", "GEA Grid Region"), ("emission_type", "Emission Type"), - ("shortrun_weighting", "Short-run weighting"), ("annual_refrig_leakage_percent", "Refrigerant leakage (frac)"), ("ng_emission_rate_gCO2e_per_kWh", f"Gas emissions rate ({ng_emission_rate_unit})"), ("year", "Year"), @@ -1937,13 +1936,6 @@ def _options(values): cols=2, spacing="md", children=[ - dmc.NumberInput( - id="edit-em-shortrun-weighting", - label="Short-run weighting", - min=0, - max=1, - step=0.1, - ), dmc.Select( id="edit-em-year", label="Year", diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 7e23c0c..b42fba8 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -241,7 +241,7 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store - year: Varies years (2025, 2035, 2045), others reset to defaults - refrigerant_leakage: Varies leakage (0.01, 0.05, 0.1), others reset to defaults - emission_types: Varies emission type ("Includes pre-combustion" vs "Combustion only"), others reset to defaults - - emission_sources: Varies emission source (average and marginal) and associated values for emissions rate and short-run weighting, others reset to defaults + - emission_sources: Varies emission source (average and marginal) and associated values, others reset to defaults """ # When dropdown is cleared, clear the stored group to allow re-selecting if not group_id: @@ -273,7 +273,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store default_year = EmissionScenarioDefaults.YEAR.value default_leakage = EmissionScenarioDefaults.REFRIGERANT_LEAKAGE.value default_emission_type = EmissionScenarioDefaults.EMISSION_TYPE.value - default_shortrun_weighting = EmissionScenarioDefaults.SHORTRUN_WEIGHTING.value default_ng_emission_rate = EmissionScenarioDefaults.NG_EMISSION_RATE_G_KWH.value # Define the variation values and default IDs @@ -284,14 +283,18 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store EmissionScenarioDefaults.NG_EMISSION_RATE_G_KWH_COMBUSTION.value, default_ng_emission_rate, ] - elec_emission_source_values = ["Average", "Average", "Marginal", "Marginal"] - elec_avg_emission_rate_values = [400, 0, None, None] - shortun_weighting_values = [0, 0, 1, 0] + elec_emission_source_values = [ + "Average (Cambium)", + "Average (User-provided)", + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + ] + elec_avg_emission_rate_values = [None, 0, None, None] emission_sources_names = [ - "Average Emissions (Typical)", + "Average Emissions (Cambium)", "Average Emissions (Zero)", - "Marginal Emissions (Short-run)", - "Marginal Emissions (Long-run)", + "Marginal Emissions (Cambium Long-run)", + "Marginal Emissions (Cambium Short-run)", ] # Create base scenario template from first existing scenario or defaults @@ -305,7 +308,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store "gea_grid_region": None, "time_zone": "America/Los_Angeles", "emission_type": default_emission_type, - "shortrun_weighting": default_shortrun_weighting, "annual_refrig_leakage_percent": default_leakage, "ng_emission_rate_gCO2e_per_kWh": default_ng_emission_rate, "year": default_year, @@ -327,7 +329,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate scen["elec_emission_source"] = default_elec_emission_source scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate - scen["shortrun_weighting"] = default_shortrun_weighting elif group_id == "refrigerant_leakage": # Vary leakage, reset others to defaults scen["annual_refrig_leakage_percent"] = leakage_values[idx % len(leakage_values)] @@ -339,7 +340,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate scen["elec_emission_source"] = default_elec_emission_source scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate - scen["shortrun_weighting"] = default_shortrun_weighting elif group_id == "emission_types": # Set emission type, reset others to defaults scen["emission_type"] = emission_types[idx % len(emission_types)] @@ -352,7 +352,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store scen["annual_refrig_leakage_percent"] = default_leakage scen["elec_emission_source"] = default_elec_emission_source scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate - scen["shortrun_weighting"] = default_shortrun_weighting elif group_id == "emission_sources": # Vary source, avg emissions rate, and short-run weighting, reset others to defaults scen["elec_emission_source"] = elec_emission_source_values[ @@ -361,9 +360,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate_values[ idx % len(elec_avg_emission_rate_values) ] - scen["shortrun_weighting"] = shortun_weighting_values[ - idx % len(shortun_weighting_values) - ] scen["em_scen_name"] = emission_sources_names[idx % len(emission_sources_names)] scen["year"] = default_year @@ -613,7 +609,6 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): Output("edit-em-gea-grid-region", "value"), Output("edit-em-time-zone", "value"), Output("edit-em-emission-type", "value"), - Output("edit-em-shortrun-weighting", "value"), Output("edit-em-year", "value"), Output("edit-em-refrig-leakage", "value"), Output("edit-em-ng-emission-rate", "value"), @@ -625,7 +620,7 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): ) def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): if not any(edit_clicks or []): - return (no_update,) * 14 + return (no_update,) * 13 if not metadata_data or "emission_settings" not in metadata_data: return ( @@ -641,7 +636,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): None, None, None, - None, "No emission data.", ) @@ -649,7 +643,7 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): triggered = callback_context.triggered if not triggered: - return (no_update,) * 14 + return (no_update,) * 13 prop_id = triggered[0]["prop_id"] id_str = prop_id.split(".")[0] @@ -670,7 +664,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): None, None, None, - None, "Failed to parse button id.", ) @@ -691,7 +684,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): None, None, None, - None, f"Scenario {em_scen_id!r} not found.", ) @@ -733,7 +725,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): scen.get("gea_grid_region", ""), scen.get("time_zone", ""), scen.get("emission_type", ""), - scen.get("shortrun_weighting"), str(scen.get("year")) if scen.get("year") is not None else "", refrig_leakage, ng_emission_rate_display, @@ -754,7 +745,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): State("edit-em-gea-grid-region", "value"), State("edit-em-time-zone", "value"), State("edit-em-emission-type", "value"), - State("edit-em-shortrun-weighting", "value"), State("edit-em-year", "value"), State("edit-em-refrig-leakage", "value"), State("edit-em-ng-emission-rate", "value"), @@ -772,7 +762,6 @@ def save_edit_emission( gea_grid_region, time_zone, emission_type, - shortrun_weighting, year, refrig_leakage, ng_emission_rate, @@ -789,11 +778,6 @@ def save_edit_emission( return True, no_update, "Scenario ID is missing." # basic type cleaning - try: - shortrun_weighting = float(shortrun_weighting) if shortrun_weighting is not None else 0.0 - except (TypeError, ValueError): - shortrun_weighting = 0.0 - try: year = int(year) if year is not None and year != "" else 2025 except (TypeError, ValueError): @@ -847,7 +831,6 @@ def save_edit_emission( new_scen["gea_grid_region"] = gea_grid_region new_scen["time_zone"] = time_zone new_scen["emission_type"] = emission_type - new_scen["shortrun_weighting"] = shortrun_weighting new_scen["year"] = year new_scen["annual_refrig_leakage_percent"] = refrig_leakage new_scen["ng_emission_rate_gCO2e_per_kWh"] = ng_emission_rate @@ -1085,7 +1068,7 @@ def update_ng_rate_on_emission_type_change(emission_type, unit_mode): prevent_initial_call=True, ) def update_avg_emission_on_source_change(emission_source): - """Enable/disable average grid emissions input when emission source changes.""" - disable_avg = emission_source != "Average" + """Enable/disable fixed average grid emissions input when emission source changes.""" + disable_avg = emission_source != "Average (User-provided)" return disable_avg diff --git a/src/config.py b/src/config.py index 709c19c..b8cc134 100644 --- a/src/config.py +++ b/src/config.py @@ -60,7 +60,6 @@ class EmissionTableRows(Enum): "grid_scenario", "gea_grid_region", "emission_type", - "shortrun_weighting", "annual_refrig_leakage_percent", "ng_emission_rate_gCO2e_per_kWh", "year", @@ -70,12 +69,11 @@ class EmissionTableRows(Enum): class EmissionScenarioDefaults(Enum): """Default values for emission scenario parameters.""" - ELEC_EMISSION_SOURCE: str = "Marginal" + ELEC_EMISSION_SOURCE: str = "Marginal (Cambium, Long-run)" ELEC_AVG_EMISSION_RATE_G_KWH: float = None YEAR: int = 2025 REFRIGERANT_LEAKAGE: float = 0.02 EMISSION_TYPE: str = "Includes pre-combustion" - SHORTRUN_WEIGHTING: float = 0.0 NG_EMISSION_RATE_G_KWH: float = 239.2 NG_EMISSION_RATE_G_KWH_COMBUSTION: float = 181 diff --git a/src/emissions.py b/src/emissions.py index 52a4ffe..269cbf9 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -16,7 +16,6 @@ class EmissionScenario(DotAccessMixin, BaseModel): gea_grid_region: str | None = None time_zone: str emission_type: str - shortrun_weighting: float annual_refrig_leakage_percent: float ng_emission_rate_gCO2e_per_kWh: float year: int diff --git a/src/energy.py b/src/energy.py index 15502f0..775aa3e 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1150,8 +1150,6 @@ def site_to_source( ) em_scen = metadata[em_scen_id] - - shortrun_weighting = float(em_scen.shortrun_weighting) annual_refrig_leakage_percent = float(em_scen.annual_refrig_leakage_percent) gas_emissions_rate = float(em_scen.ng_emission_rate_gCO2e_per_kWh) @@ -1163,12 +1161,20 @@ def site_to_source( base[Col.HOUR.value] = base.index.hour base[Col.DOY.value] = base.index.dayofyear - if em_scen.elec_emission_source == "Marginal": + if em_scen.elec_emission_source in [ + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + ]: emissions_data = get_emissions_data(metadata[em_scen_id]) logger.debug( f"Marginal grid emissions: Loaded {len(emissions_data.df)} emission data rows" ) + if em_scen.elec_emission_source == "Marginal (Cambium, Long-run)": + shortrun_weighting = 0 + elif em_scen.elec_emission_source == "Marginal (Cambium, Short-run)": + shortrun_weighting = 1 + # collapse emissions to month-hour averages emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour @@ -1226,7 +1232,7 @@ def site_to_source( # used with non-leap emission scenario years. Emissions are still correct # because they're matched by month+hour pattern. - elif em_scen.elec_emission_source == "Average": + elif em_scen.elec_emission_source == "Average (User-provided)": elec_avg_emission_rate = em_scen.elec_avg_emission_rate_gCO2e_per_kWh if elec_avg_emission_rate is not None: logger.debug(f"Average grid emissions: {elec_avg_emission_rate} gCO2e/kWh") diff --git a/src/metadata.py b/src/metadata.py index 4b36e68..591701c 100644 --- a/src/metadata.py +++ b/src/metadata.py @@ -97,13 +97,12 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_a", em_scen_name="2025", - elec_emission_source="Marginal", + elec_emission_source="Marginal (Cambium, Long-run)", elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2025, @@ -111,13 +110,12 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_b", em_scen_name="2035", - elec_emission_source="Marginal", + elec_emission_source="Marginal (Cambium, Long-run)", elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2035, @@ -125,13 +123,12 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_c", em_scen_name="2045", - elec_emission_source="Marginal", + elec_emission_source="Marginal (Cambium, Long-run)", elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2045, diff --git a/tests/conftest.py b/tests/conftest.py index 511abb3..9f00bb8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -54,13 +54,12 @@ def emission_scenario(): """Create a sample emission scenario for testing.""" return EmissionScenario( em_scen_id="test_em_1", - elec_emission_source="Marginal", + elec_emission_source="Marginal (Cambium, Long-run)", elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region="CAMX", time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0.0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2025, From 6c145a0cf4c780dad58881dfa86d3e2c7c74fecb Mon Sep 17 00:00:00 2001 From: urwahah Date: Tue, 8 Sep 2026 20:43:01 -0700 Subject: [PATCH 25/48] add cambium average emissions calculation --- pages/emissions_page.py | 8 +-- src/config.py | 3 ++ src/emissions.py | 16 +++++- src/energy.py | 112 +++++++++++++++++++++++++--------------- utils/units.py | 3 ++ 5 files changed, 94 insertions(+), 48 deletions(-) diff --git a/pages/emissions_page.py b/pages/emissions_page.py index b42fba8..650f15a 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -291,10 +291,10 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store ] elec_avg_emission_rate_values = [None, 0, None, None] emission_sources_names = [ - "Average Emissions (Cambium)", - "Average Emissions (Zero)", - "Marginal Emissions (Cambium Long-run)", - "Marginal Emissions (Cambium Short-run)", + "Cambium Average Emissions", + "Zero Emissions", + "Long-run Marginal Emissions", + "Short-run Marginal Emissions", ] # Create base scenario template from first existing scenario or defaults diff --git a/src/config.py b/src/config.py index b8cc134..f79c319 100644 --- a/src/config.py +++ b/src/config.py @@ -170,6 +170,9 @@ class Columns(StrEnum): SRMER_CO2E_C = "srmer_co2e_c" SRMER_CO2E_P = "srmer_co2e_p" SRMER_CO2E = "srmer_co2e" + AER_LOAD_CO2E_C = "aer_load_co2e_c" + AER_LOAD_CO2E_P = "aer_load_co2e_p" + AER_LOAD_CO2E = "aer_load_co2e" SHORTRUN_WEIGHTING = "shortrun_weighting" ELEC_EMISSIONS_RATE_G_PER_KWH = "elec_emissions_rate_gCO2e_per_kWh" diff --git a/src/emissions.py b/src/emissions.py index 269cbf9..2e3345d 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -25,7 +25,7 @@ class StandardEmissions: """ Unified interface for emissions data. Canonical schema: - emission_scenario | gea_grid_region | time_zone | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p + emission_scenario | gea_grid_region | time_zone | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p | aer_load_co2e_c | aer_load_co2e_p """ def __init__(self, df: pd.DataFrame): @@ -43,6 +43,8 @@ def _validate(df: pd.DataFrame) -> pd.DataFrame: "lrmer_co2e_p", "srmer_co2e_c", "srmer_co2e_p", + "aer_load_co2e_c", + "aer_load_co2e_p", ] missing = [c for c in required if c not in df.columns] if missing: @@ -55,7 +57,14 @@ def _validate(df: pd.DataFrame) -> pd.DataFrame: df = df.sort_values("timestamp").set_index("timestamp") # enforce numeric - for col in ["lrmer_co2e_c", "lrmer_co2e_p", "srmer_co2e_c", "srmer_co2e_p"]: + for col in [ + "lrmer_co2e_c", + "lrmer_co2e_p", + "srmer_co2e_c", + "srmer_co2e_p", + "aer_load_co2e_c", + "aer_load_co2e_p", + ]: df[col] = pd.to_numeric(df[col], errors="coerce") if df[col].isnull().any(): raise ValueError(f"Invalid numeric values in column {col}") @@ -118,6 +127,9 @@ def get_emissions_data( "srmer_co2e_c": df["srmer_co2e_c"], "srmer_co2e_p": df["srmer_co2e_p"], "srmer_co2e": df["srmer_co2e"], + "aer_load_co2e_c": df["aer_load_co2e_c"], + "aer_load_co2e_p": df["aer_load_co2e_p"], + "aer_load_co2e": df["aer_load_co2e"], } ) diff --git a/src/energy.py b/src/energy.py index 775aa3e..cb4a115 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1164,61 +1164,89 @@ def site_to_source( if em_scen.elec_emission_source in [ "Marginal (Cambium, Long-run)", "Marginal (Cambium, Short-run)", + "Average (Cambium)", ]: emissions_data = get_emissions_data(metadata[em_scen_id]) logger.debug( - f"Marginal grid emissions: Loaded {len(emissions_data.df)} emission data rows" + f"Cambium grid emissions: Loaded {len(emissions_data.df)} emission data rows" ) - if em_scen.elec_emission_source == "Marginal (Cambium, Long-run)": - shortrun_weighting = 0 - elif em_scen.elec_emission_source == "Marginal (Cambium, Short-run)": - shortrun_weighting = 1 - # collapse emissions to month-hour averages emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour - emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting group_cols = [Col.MONTH.value, Col.HOUR.value] - # all rates are in gCO2e/kWh - if em_scen.emission_type == "Combustion only": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) - ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) - elif em_scen.emission_type == "Includes pre-combustion": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - ( - emissions_data.df[Col.LRMER_CO2E_C.value] - + emissions_data.df[Col.LRMER_CO2E_P.value] - ) - * (1 - shortrun_weighting) - ) + ( - ( - emissions_data.df[Col.SRMER_CO2E_C.value] - + emissions_data.df[Col.SRMER_CO2E_P.value] + if em_scen.elec_emission_source == "Average (Cambium)": + # all rates are in gCO2e/kWh + if em_scen.emission_type == "Combustion only": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = emissions_data.df[ + Col.AER_LOAD_CO2E_C.value + ] + elif em_scen.emission_type == "Includes pre-combustion": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + emissions_data.df[Col.AER_LOAD_CO2E_C.value] + + emissions_data.df[Col.AER_LOAD_CO2E_P.value] ) - * shortrun_weighting + else: + raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") + + df_em = ( + emissions_data.df.groupby(group_cols)[ + [ + Col.ELEC_EMISSIONS_RATE_G_PER_KWH, + Col.AER_LOAD_CO2E_C.value, + Col.AER_LOAD_CO2E_P.value, + Col.AER_LOAD_CO2E.value, + ] + ] + .mean() + .reset_index() ) else: - raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") - - df_em = ( - emissions_data.df.groupby(group_cols)[ - [ - Col.ELEC_EMISSIONS_RATE_G_PER_KWH, - Col.LRMER_CO2E_C.value, - Col.LRMER_CO2E_P.value, - Col.LRMER_CO2E.value, - Col.SRMER_CO2E_C.value, - Col.SRMER_CO2E_P.value, - Col.SRMER_CO2E.value, - Col.SHORTRUN_WEIGHTING.value, + if em_scen.elec_emission_source == "Marginal (Cambium, Long-run)": + shortrun_weighting = 0 + elif em_scen.elec_emission_source == "Marginal (Cambium, Short-run)": + shortrun_weighting = 1 + emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting + + # all rates are in gCO2e/kWh + if em_scen.emission_type == "Combustion only": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) + ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) + elif em_scen.emission_type == "Includes pre-combustion": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + ( + emissions_data.df[Col.LRMER_CO2E_C.value] + + emissions_data.df[Col.LRMER_CO2E_P.value] + ) + * (1 - shortrun_weighting) + ) + ( + ( + emissions_data.df[Col.SRMER_CO2E_C.value] + + emissions_data.df[Col.SRMER_CO2E_P.value] + ) + * shortrun_weighting + ) + else: + raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") + + df_em = ( + emissions_data.df.groupby(group_cols)[ + [ + Col.ELEC_EMISSIONS_RATE_G_PER_KWH, + Col.LRMER_CO2E_C.value, + Col.LRMER_CO2E_P.value, + Col.LRMER_CO2E.value, + Col.SRMER_CO2E_C.value, + Col.SRMER_CO2E_P.value, + Col.SRMER_CO2E.value, + Col.SHORTRUN_WEIGHTING.value, + ] ] - ] - .mean() - .reset_index() - ) + .mean() + .reset_index() + ) # expand loads with this year's emissions merged = base.merge(df_em, on=[Col.MONTH.value, Col.HOUR.value], how="left") @@ -1235,7 +1263,7 @@ def site_to_source( elif em_scen.elec_emission_source == "Average (User-provided)": elec_avg_emission_rate = em_scen.elec_avg_emission_rate_gCO2e_per_kWh if elec_avg_emission_rate is not None: - logger.debug(f"Average grid emissions: {elec_avg_emission_rate} gCO2e/kWh") + logger.debug(f"Fixed average grid emissions: {elec_avg_emission_rate} gCO2e/kWh") merged = base.copy() merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = float(elec_avg_emission_rate) diff --git a/utils/units.py b/utils/units.py index 9efe09d..7ad45be 100644 --- a/utils/units.py +++ b/utils/units.py @@ -298,6 +298,8 @@ def sqft_to_sqm(sqft): "lrmer_co2e_p": ("emissions_rate", "LRMER Pre-combustion"), "srmer_co2e_c": ("emissions_rate", "SRMER Combustion"), "srmer_co2e_p": ("emissions_rate", "SRMER Pre-combustion"), + "aer_load_co2e_c": ("emissions_rate", "AER Load Combustion"), + "aer_load_co2e_p": ("emissions_rate", "AER Load Pre-combustion"), "ng_emission_rate_gCO2e_per_kWh": ("gas_emission_factor", "Gas Emissions Rate"), # === Refrigerant Mass (kg) === "hr_wwhp_refrigerant_weight_kg": ("mass", "HR-WWHP Refrig Weight"), @@ -327,6 +329,7 @@ def sqft_to_sqm(sqft): # === Emission Scenario Parameters === "lrmer_co2e": (None, "LRMER CO₂e"), "srmer_co2e": (None, "SRMER CO₂e"), + "aer_load_co2e": (None, "AER Load CO₂e"), "shortrun_weighting": (None, "Short-run Weighting"), "year": (None, "Year"), # === Scenario Identifiers === From 0d09d15aab01183a209987ca1d6cbcdfa07edbaf Mon Sep 17 00:00:00 2001 From: urwa Date: Wed, 9 Sep 2026 18:06:23 +0000 Subject: [PATCH 26/48] GITBOOK-15: Fuel switching --- docs/documentation/calculations.md | 16 ++++++++++------ docs/documentation/equipment.md | 16 ++++++++++++---- docs/documentation/loads/load-types.md | 4 ++-- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/docs/documentation/calculations.md b/docs/documentation/calculations.md index cfb4918..2fad5fa 100644 --- a/docs/documentation/calculations.md +++ b/docs/documentation/calculations.md @@ -88,7 +88,12 @@ The second step is to convert the electricity and gas site energy, and any refri * The electricity emissions data is taken from Cambium (see further information in [Emissions](emissions.md)) in month-hour average format (data is provided for each hour of a representative day for every month). This is expanded to match with the full 8,760-hour resolution of the site energy data. -**Step 3: Calculate emissions** +**Step 3: Calculate fuel switching (**[**if enabled**](equipment.md#backup-equipment)**)** + +* The hourly carbon emissions intensity for electric and gas heating is calculated using the corresponding emissions factor and equipment operating efficiency. +* For hours where electricity carbon intensity is higher than gas, the HHW load served by the AWHP is switched to the gas boiler. + +**Step 4: Calculate emissions** * The total emissions for each fuel is calculated using the total usage and fuel emissions rate. * The total emissions associated with refrigerant leakage is calculated using the type, weight, and annual leakage rate for the the refrigerant in each equipment. Leakage is assumed to be spread evenly over the year. @@ -110,8 +115,7 @@ The second step is to convert the electricity and gas site energy, and any refri 3. Add functionality for water cooled chillers. 4. Add cooling tower water use calculations. 5. Add functionality for chiller performance tables and/or curves instead of fixed COP. -6. Add fuel switching evaluation (based on grid emissions and equipment COP). -7. Add load shifting evaluation (thermal energy storage). -8. Add exhaust air heat recovery as an optional heat source for WWHPs. -9. Add functionality for AWHP models with heat recovery. -10. Add utility cost calculations. +6. Add load shifting evaluation (thermal energy storage). +7. Add exhaust air heat recovery as an optional heat source for WWHPs. +8. Add functionality for AWHP models with heat recovery. +9. Add utility cost calculations. diff --git a/docs/documentation/equipment.md b/docs/documentation/equipment.md index c92929e..7ac69ba 100644 --- a/docs/documentation/equipment.md +++ b/docs/documentation/equipment.md @@ -8,7 +8,7 @@ Equipment scenarios are defined on this page. An explanation for each input and ### Inputs -For each category of equipment noted below, the tool's equipment library defines a number of equipment models with energy and emissions characteristics, including capacity, efficiency, operating temperatures, and refrigerant type and weight. The library can be viewed in full [here](../../data/input/equipment_data.JSON). +For each category of equipment noted below, the tool's equipment library defines a number of equipment models with energy and emissions characteristics, including capacity, efficiency, operating temperatures, and refrigerant type and weight. The library can be viewed in full [here](https://github.com/CenterForTheBuiltEnvironment/decarb-tool/blob/development/data/input/equipment_data.JSON).
@@ -70,13 +70,13 @@ These two inputs determine how the total number of AWHP units, not including red An integer number of additional units for redundancy. The default value is 1, i.e., N+1 redundancy. The total number of AWHP units, including redundancy, is used in refrigerant leakage calculations. -**AWHP Use Cooling** +**Use AWHP for Cooling** This input determines if the AWHPs serve cooling loads. The tool prioritizes heating loads, so the cooling capacity in a given hour is calculated using the number of units not used to serve heating load. **AWHP Sizing Priority** -This input determines which load profile (heating, cooling, or both) is used to calculate the number of units per the sizing mode and value inputs. The default is heating load. Not editable if AWHP Use Cooling is unchecked. +This input determines which load profile (heating, cooling, or both) is used to calculate the number of units per the sizing mode and value inputs. The default is heating load. Not editable if Use AWHP for Cooling is unchecked.
@@ -95,6 +95,10 @@ The default equipment types are all specific equipment models. Two types of backup heating equipment are defined: gas boilers and electric resistance heaters. Both are assumed to have fixed efficiency over all operating conditions. A range of typical gas boiler efficiencies are provided; the default is 80% efficiency. +**Use Optimal Heating Fuel** + +Dynamically switch between electric and gas heating based on emissions (see [Calculations](calculations.md#calculation-1) for further detail). Only selectable if the scenario contains both AWHP and gas boiler backup heating. + **Backup Cooling** The backup cooling equipment is assumed to be an air-cooled chiller with fixed efficiency over all operating conditions. Generic units are defined with efficiency values per the IECC. @@ -103,7 +107,7 @@ The backup cooling equipment is assumed to be an air-cooled chiller with fixed e ### Default Scenario Groups -A summary of the significant inputs in each scenario group is provided below. The full list of inputs for each default scenario can be viewed in the tool or [here](../../data/input/equipment_data.JSON#L729). +A summary of the significant inputs in each scenario group is provided below. The full list of inputs for each default scenario can be viewed in the tool or [here](https://github.com/CenterForTheBuiltEnvironment/decarb-tool/blob/development/data/input/equipment_data.JSON#L729). #### Default @@ -121,6 +125,10 @@ This scenario group evaluates the impact of heat recovery with different configu This scenario group varies the WWHP and AWHP heating hot water supply temperature and performance calculation model (fixed vs OAT-based reset), holding all other inputs constant. +#### Dynamic Fuel Switching + +This scenario group compares fully gas and fully electric heating plants with a partial AWHP scenario and a fuel switching scenario. + ### Future Development 1. Allow users to edit the equipment library and add new equipment models. diff --git a/docs/documentation/loads/load-types.md b/docs/documentation/loads/load-types.md index ad9eb22..73b12e6 100644 --- a/docs/documentation/loads/load-types.md +++ b/docs/documentation/loads/load-types.md @@ -10,11 +10,11 @@ Expand this dropdown and select `Open Library` to access the Load Data Library p #### DOE -The Simulated:DOE dataset contains loads generated using the [DOE Commercial Reference Building models](https://www.energy.gov/cmei/buildings/commercial-reference-buildings) with every combination of the following characteristics: +The Simulated:DOE dataset contains loads generated using the [DOE commercial prototype building models](https://www.energycodes.gov/prototype-building-models) with every combination of the following characteristics: * 4 building types: Hospital, Large Office, Outpatient Healthcare, Large Hotel * 2 vintages: 2004, 2022 -* 16 climate zones: 1A, 2A-B, 3A-C, 4A-C, 5A-C, 6A-B, 7, 8. The representative cities used for each climate zone are listed [here](https://www.energy.gov/cmei/buildings/commercial-reference-buildings). +* 16 climate zones: 1A, 2A-B, 3A-C, 4A-C, 5A-C, 6A-B, 7, 8. The representative cities used for each climate zone are listed [here](https://www.energycodes.gov/prototype-building-models). The heating loads in this dataset include only heating hot water (HHW) loads. From c74b2b7a64530d5e4814304e91440721fc5128d0 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 9 Sep 2026 11:09:40 -0700 Subject: [PATCH 27/48] add 4th emission scenario to chart --- app.py | 4 ++-- layout/charts.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app.py b/app.py index d3a8561..9bbbd9b 100644 --- a/app.py +++ b/app.py @@ -10,8 +10,8 @@ from utils.logging_config import get_logger, setup_logging # Read level from environment variable (or default to INFO) -log_level_name = os.environ.get("LOG_LEVEL", "DEBUG") -log_level = getattr(logging, log_level_name.upper(), logging.DEBUG) +log_level_name = os.environ.get("LOG_LEVEL", "INFO") +log_level = getattr(logging, log_level_name.upper(), logging.INFO) setup_logging(level=log_level) # Get a logger for this module diff --git a/layout/charts.py b/layout/charts.py index 2e9704b..523ce35 100644 --- a/layout/charts.py +++ b/layout/charts.py @@ -54,7 +54,7 @@ def emissions_bar_chart(): dmc.MultiSelect( id="emission-em-scen-dropdown", data=_emission_scen_seed(), # will be overwritten dynamically - value=["em_scenario_a", "em_scenario_b", "em_scenario_c"], + value=["em_scenario_a", "em_scenario_b", "em_scenario_c", "em_scenario_d"], placeholder="Emission Scenarios", searchable=True, clearable=True, From 6fca317cc72d1d4507665cbdc1d6700c7efd2dd2 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 9 Sep 2026 11:13:17 -0700 Subject: [PATCH 28/48] revise constant source name, add check for positive rate --- data/input/metadata_index.json | 2 +- pages/emissions_page.py | 6 +++--- src/energy.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data/input/metadata_index.json b/data/input/metadata_index.json index cc1b7db..79590e3 100644 --- a/data/input/metadata_index.json +++ b/data/input/metadata_index.json @@ -67,7 +67,7 @@ "Marginal (Cambium, Long-run)", "Marginal (Cambium, Short-run)", "Average (Cambium)", - "Average (User-provided)" + "Average (Constant)" ], "year": [ 2025, diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 650f15a..6deb5cd 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -285,14 +285,14 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store ] elec_emission_source_values = [ "Average (Cambium)", - "Average (User-provided)", + "Average (Constant)", "Marginal (Cambium, Long-run)", "Marginal (Cambium, Short-run)", ] elec_avg_emission_rate_values = [None, 0, None, None] emission_sources_names = [ "Cambium Average Emissions", - "Zero Emissions", + "Constant (Zero) Emissions", "Long-run Marginal Emissions", "Short-run Marginal Emissions", ] @@ -1069,6 +1069,6 @@ def update_ng_rate_on_emission_type_change(emission_type, unit_mode): ) def update_avg_emission_on_source_change(emission_source): """Enable/disable fixed average grid emissions input when emission source changes.""" - disable_avg = emission_source != "Average (User-provided)" + disable_avg = emission_source != "Average (Constant)" return disable_avg diff --git a/src/energy.py b/src/energy.py index cb4a115..9b376d2 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1260,9 +1260,9 @@ def site_to_source( # used with non-leap emission scenario years. Emissions are still correct # because they're matched by month+hour pattern. - elif em_scen.elec_emission_source == "Average (User-provided)": + elif em_scen.elec_emission_source == "Average (Constant)": elec_avg_emission_rate = em_scen.elec_avg_emission_rate_gCO2e_per_kWh - if elec_avg_emission_rate is not None: + if elec_avg_emission_rate is not None and elec_avg_emission_rate >= 0: logger.debug(f"Fixed average grid emissions: {elec_avg_emission_rate} gCO2e/kWh") merged = base.copy() From 34b083d73476442ff41699c6c028cbeef81dc366 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 9 Sep 2026 11:32:05 -0700 Subject: [PATCH 29/48] remove timezone input from emissions data/scenarios --- layout/input.py | 12 ------------ pages/emissions_page.py | 13 ++----------- src/emissions.py | 5 +---- src/metadata.py | 3 --- tests/conftest.py | 1 - 5 files changed, 3 insertions(+), 31 deletions(-) diff --git a/layout/input.py b/layout/input.py index 6106406..e249472 100644 --- a/layout/input.py +++ b/layout/input.py @@ -1916,12 +1916,6 @@ def _options(values): cols=2, spacing="md", children=[ - dmc.TextInput( - id="edit-em-time-zone", - label="Time zone", - placeholder="e.g. America/Los_Angeles", - disabled=True, - ), dmc.Select( id="edit-em-emission-type", label="Emission type", @@ -1930,12 +1924,6 @@ def _options(values): searchable=False, clearable=False, ), - ], - ), - dmc.SimpleGrid( - cols=2, - spacing="md", - children=[ dmc.Select( id="edit-em-year", label="Year", diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 6deb5cd..d003207 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -306,7 +306,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store "elec_avg_emission_rate_gCO2e_per_kWh": default_elec_avg_emission_rate, "grid_scenario": "MidCase", "gea_grid_region": None, - "time_zone": "America/Los_Angeles", "emission_type": default_emission_type, "annual_refrig_leakage_percent": default_leakage, "ng_emission_rate_gCO2e_per_kWh": default_ng_emission_rate, @@ -607,7 +606,6 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): Output("edit-em-elec-avg-emission-rate", "value"), Output("edit-em-grid-scenario", "value"), Output("edit-em-gea-grid-region", "value"), - Output("edit-em-time-zone", "value"), Output("edit-em-emission-type", "value"), Output("edit-em-year", "value"), Output("edit-em-refrig-leakage", "value"), @@ -620,7 +618,7 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): ) def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): if not any(edit_clicks or []): - return (no_update,) * 13 + return (no_update,) * 12 if not metadata_data or "emission_settings" not in metadata_data: return ( @@ -632,7 +630,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", - "", None, None, None, @@ -643,7 +640,7 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): triggered = callback_context.triggered if not triggered: - return (no_update,) * 13 + return (no_update,) * 12 prop_id = triggered[0]["prop_id"] id_str = prop_id.split(".")[0] @@ -660,7 +657,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", - "", None, None, None, @@ -680,7 +676,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", - "", None, None, None, @@ -723,7 +718,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): elec_avg_emission_rate_display, scen.get("grid_scenario", ""), scen.get("gea_grid_region", ""), - scen.get("time_zone", ""), scen.get("emission_type", ""), str(scen.get("year")) if scen.get("year") is not None else "", refrig_leakage, @@ -743,7 +737,6 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): State("edit-em-elec-avg-emission-rate", "value"), State("edit-em-grid-scenario", "value"), State("edit-em-gea-grid-region", "value"), - State("edit-em-time-zone", "value"), State("edit-em-emission-type", "value"), State("edit-em-year", "value"), State("edit-em-refrig-leakage", "value"), @@ -760,7 +753,6 @@ def save_edit_emission( elec_avg_emission_rate, grid_scenario, gea_grid_region, - time_zone, emission_type, year, refrig_leakage, @@ -829,7 +821,6 @@ def save_edit_emission( new_scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate new_scen["grid_scenario"] = grid_scenario new_scen["gea_grid_region"] = gea_grid_region - new_scen["time_zone"] = time_zone new_scen["emission_type"] = emission_type new_scen["year"] = year new_scen["annual_refrig_leakage_percent"] = refrig_leakage diff --git a/src/emissions.py b/src/emissions.py index 2e3345d..cd9269d 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -14,7 +14,6 @@ class EmissionScenario(DotAccessMixin, BaseModel): elec_avg_emission_rate_gCO2e_per_kWh: float | None = None grid_scenario: str gea_grid_region: str | None = None - time_zone: str emission_type: str annual_refrig_leakage_percent: float ng_emission_rate_gCO2e_per_kWh: float @@ -25,7 +24,7 @@ class StandardEmissions: """ Unified interface for emissions data. Canonical schema: - emission_scenario | gea_grid_region | time_zone | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p | aer_load_co2e_c | aer_load_co2e_p + emission_scenario | gea_grid_region | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p | aer_load_co2e_c | aer_load_co2e_p """ def __init__(self, df: pd.DataFrame): @@ -37,7 +36,6 @@ def _validate(df: pd.DataFrame) -> pd.DataFrame: "emission_scenario", "gea_grid_region", "year", - "time_zone", "timestamp", "lrmer_co2e_c", "lrmer_co2e_p", @@ -117,7 +115,6 @@ def get_emissions_data( "em_scen_id": scenario.em_scen_id, "emission_scenario": scenario.grid_scenario, "gea_grid_region": scenario.gea_grid_region, - "time_zone": scenario.time_zone, "emission_type": scenario.emission_type, "year": df["year"], "timestamp": df["timestamp"], diff --git a/src/metadata.py b/src/metadata.py index 591701c..f4ca6e4 100644 --- a/src/metadata.py +++ b/src/metadata.py @@ -101,7 +101,6 @@ def create(cls, **overrides: Any) -> "Metadata": elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, @@ -114,7 +113,6 @@ def create(cls, **overrides: Any) -> "Metadata": elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, @@ -127,7 +125,6 @@ def create(cls, **overrides: Any) -> "Metadata": elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, diff --git a/tests/conftest.py b/tests/conftest.py index 9f00bb8..953b9c2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -58,7 +58,6 @@ def emission_scenario(): elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region="CAMX", - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, From 669fea9072305fe7eaccf90592ce545f8afee555 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 9 Sep 2026 11:44:03 -0700 Subject: [PATCH 30/48] blank cambium grid inputs when set to constant emissions --- pages/emissions_page.py | 17 ++++++++++++++--- src/emissions.py | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/pages/emissions_page.py b/pages/emissions_page.py index d003207..c547922 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -1055,11 +1055,22 @@ def update_ng_rate_on_emission_type_change(emission_type, unit_mode): @callback( Output("edit-em-elec-avg-emission-rate", "disabled"), + Output("edit-em-grid-scenario", "value", allow_duplicate=True), + Output("edit-em-gea-grid-region", "value", allow_duplicate=True), Input("edit-em-elec-source", "value"), + State("edit-em-grid-scenario", "value"), + State("edit-em-gea-grid-region", "value"), prevent_initial_call=True, ) -def update_avg_emission_on_source_change(emission_source): - """Enable/disable fixed average grid emissions input when emission source changes.""" +def update_emission_inputs_on_source_change(emission_source, grid_scenario, grid_region): + """Update emissions inputs when emission source changes to fixed user-provided value.""" + + # disable average emissions rate input disable_avg = emission_source != "Average (Constant)" - return disable_avg + # blank out cambium-related inputs + if not disable_avg: + grid_scenario = None + grid_region = None + + return disable_avg, grid_scenario, grid_region diff --git a/src/emissions.py b/src/emissions.py index cd9269d..dd286e8 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -12,7 +12,7 @@ class EmissionScenario(DotAccessMixin, BaseModel): em_scen_name: str elec_emission_source: str elec_avg_emission_rate_gCO2e_per_kWh: float | None = None - grid_scenario: str + grid_scenario: str | None = None gea_grid_region: str | None = None emission_type: str annual_refrig_leakage_percent: float From 483da4fb37e0834974beb371199eb79cbde9d770 Mon Sep 17 00:00:00 2001 From: urwahah Date: Wed, 9 Sep 2026 15:03:33 -0700 Subject: [PATCH 31/48] add "constant" to fixed emission factor name --- data/input/metadata_index.json | 2 +- layout/input.py | 4 ++-- pages/emissions_page.py | 11 +++++++---- src/energy.py | 6 +++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/data/input/metadata_index.json b/data/input/metadata_index.json index 79590e3..76a81fe 100644 --- a/data/input/metadata_index.json +++ b/data/input/metadata_index.json @@ -67,7 +67,7 @@ "Marginal (Cambium, Long-run)", "Marginal (Cambium, Short-run)", "Average (Cambium)", - "Average (Constant)" + "Constant (User-provided)" ], "year": [ 2025, diff --git a/layout/input.py b/layout/input.py index 35ddd73..3af1f1d 100644 --- a/layout/input.py +++ b/layout/input.py @@ -1192,7 +1192,7 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un ("elec_emission_source", "Grid emissions source"), ( "elec_avg_emission_rate_gCO2e_per_kWh", - f"Average grid emissions rate ({elec_emission_rate_unit})", + f"Constant grid emissions rate ({elec_emission_rate_unit})", ), ("grid_scenario", "Grid Scenario"), ("gea_grid_region", "GEA Grid Region"), @@ -1939,7 +1939,7 @@ def _options(values): [ dmc.Text( id="edit-em-elec-emission-rate-label", - children="Average grid emissions rate (g/kWh)", + children="Constant grid emissions rate (g/kWh)", size="sm", fw=500, ), diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 1ffad74..d9e9e67 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -101,7 +101,7 @@ def layout(): "value": "emission_types", }, { - "label": "Average vs marginal emissions", + "label": "Different electricity emission factors", "value": "emission_sources", }, ], @@ -283,7 +283,7 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store ] elec_emission_source_values = [ "Average (Cambium)", - "Average (Constant)", + "Constant (User-provided)", "Marginal (Cambium, Long-run)", "Marginal (Cambium, Short-run)", ] @@ -358,6 +358,9 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store idx % len(elec_avg_emission_rate_values) ] scen["em_scen_name"] = emission_sources_names[idx % len(emission_sources_names)] + if scen["elec_emission_source"] == "Constant (User-provided)": + scen["grid_scenario"] = None + scen["gea_grid_region"] = None scen["year"] = default_year scen["annual_refrig_leakage_percent"] = default_leakage @@ -861,7 +864,7 @@ def update_emissions_rate_label(unit_mode): ng_unit = get_display_unit("gas_emission_factor", unit_mode) elec_unit = get_display_unit("emissions_rate", unit_mode) - return f"Gas emissions rate ({ng_unit})", f"Average grid emissions rate ({elec_unit})" + return f"Gas emissions rate ({ng_unit})", f"Constant grid emissions rate ({elec_unit})" @callback( @@ -1018,7 +1021,7 @@ def update_emission_inputs_on_source_change(emission_source, grid_scenario, grid """Update emissions inputs when emission source changes to fixed user-provided value.""" # disable average emissions rate input - disable_avg = emission_source != "Average (Constant)" + disable_avg = emission_source != "Constant (User-provided)" # blank out cambium-related inputs if not disable_avg: diff --git a/src/energy.py b/src/energy.py index 9b376d2..cd85c28 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1260,15 +1260,15 @@ def site_to_source( # used with non-leap emission scenario years. Emissions are still correct # because they're matched by month+hour pattern. - elif em_scen.elec_emission_source == "Average (Constant)": + elif em_scen.elec_emission_source == "Constant (User-provided)": elec_avg_emission_rate = em_scen.elec_avg_emission_rate_gCO2e_per_kWh if elec_avg_emission_rate is not None and elec_avg_emission_rate >= 0: - logger.debug(f"Fixed average grid emissions: {elec_avg_emission_rate} gCO2e/kWh") + logger.debug(f"Constant grid emissions rate: {elec_avg_emission_rate} gCO2e/kWh") merged = base.copy() merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = float(elec_avg_emission_rate) else: - raise ValueError("Provide a valid input value for average grid emissions rate.") + raise ValueError("Provide a valid input value for constant grid emissions rate.") else: raise ValueError(f"Invalid elec_emissions_source: {em_scen.elec_emission_source}") From 9020a8db1800df64a087a34b929b6959bb726b77 Mon Sep 17 00:00:00 2001 From: urwahah Date: Thu, 10 Sep 2026 11:20:16 -0700 Subject: [PATCH 32/48] resolve merge conflicts --- data/input/equipment_data.JSON | 100 ++++++++++++++++++++++++++++++++- 1 file changed, 99 insertions(+), 1 deletion(-) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index c70f04a..d2acfe9 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -983,6 +983,31 @@ } } }, + { + "eq_id": "bo05", + "eq_type": "backup_heating", + "eq_subtype": "hot_water", + "eq_calc_type": "specific", + "model": "GenericBoiler", + "fuel": "natural_gas", + "capacity_W": 190500, + "dimensions": { + "length": 1.06, + "width": 0.833, + "height": 2.01 + }, + "operating_weight_g": 305000, + "electrical": { + "mca": 10, + "voltage": 120, + "phase": 1 + }, + "performance": { + "heating": { + "efficiency": 0.6 + } + } + }, { "eq_id": "ch01", "eq_type": "chiller", @@ -1175,6 +1200,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1192,6 +1218,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1209,6 +1236,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1226,6 +1254,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1243,6 +1272,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1260,6 +1290,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1277,6 +1308,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1294,6 +1326,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1311,6 +1344,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1328,6 +1362,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "bo03", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1345,6 +1380,7 @@ "awhp_use_cooling": false, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1362,6 +1398,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1379,6 +1416,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1396,6 +1434,7 @@ "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", + "fuel_switching": false, "chiller": "ch02" }, { @@ -1415,6 +1454,60 @@ "backup_heating": "res02", "chiller": "ch02" }, + { + "eq_scen_id": "eq_scenario_16", + "eq_scen_name": "90% Eff. Gas Boiler+AC Chiller", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": null, + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 38, + "awhp_use_cooling": false, + "awhp_sizing_priority": "heating", + "backup_heating": "bo02", + "fuel_switching": false, + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_17", + "eq_scen_name": "50% AWHP (H+C)+Gas Backup", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": "hp01", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 0.5, + "awhp_redundancy": 1, + "awhp_h_supply_t": 38, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "bo02", + "fuel_switching": false, + "chiller": "ch02" + }, + { + "eq_scen_id": "eq_scenario_18", + "eq_scen_name": "100% AWHP (H+C)+Fuel Switching", + "hr_wwhp": null, + "hr_wwhp_performance_model": "interpolate_HHWST", + "hr_wwhp_h_supply_t": 48.9, + "awhp": "hp01", + "awhp_performance_model": "interpolate_HHWST_fixed", + "awhp_sizing_mode": "integer_sizing_peak_load", + "awhp_sizing_value": 1, + "awhp_redundancy": 1, + "awhp_h_supply_t": 38, + "awhp_use_cooling": true, + "awhp_sizing_priority": "heating", + "backup_heating": "bo02", + "fuel_switching": true, + "chiller": "ch02" + }, { "eq_scen_id": "eq_scenario_19", "eq_scen_name": "100% R410A AWHP (H+C)+Elec Backup", @@ -1504,7 +1597,7 @@ "scenario_groups": [ { "group_id": "default", - "group_name": "Default", + "group_name": "Example Equipment", "scenario_ids": ["eq_scenario_1", "eq_scenario_2", "eq_scenario_3", "eq_scenario_4", "eq_scenario_5"] }, { @@ -1522,6 +1615,11 @@ "group_name": "HHW Supply Temps", "scenario_ids": ["eq_scenario_4", "eq_scenario_13", "eq_scenario_14", "eq_scenario_5", "eq_scenario_15"] }, + { + "group_id": "fuel_switching", + "group_name": "Dynamic Fuel Switching", + "scenario_ids": ["eq_scenario_16", "eq_scenario_17", "eq_scenario_4", "eq_scenario_18"] + }, { "group_id": "awhp_refrigerant_types", "group_name": "Varying AWHP Refrigerant", From a9eda271e8acc3ca4c1f9a17b99ae003de0b4384 Mon Sep 17 00:00:00 2001 From: urwahah Date: Sat, 12 Sep 2026 23:22:02 -0700 Subject: [PATCH 33/48] add icon with tooltip function and page tooltips --- layout/input.py | 45 +++++++++++++++++++++++------- pages/emissions_page.py | 9 +++--- pages/equipment_page.py | 9 +++--- pages/loads_page.py | 9 +++--- utils/tooltips.py | 61 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 111 insertions(+), 22 deletions(-) diff --git a/layout/input.py b/layout/input.py index e1e3517..696dc95 100644 --- a/layout/input.py +++ b/layout/input.py @@ -15,7 +15,7 @@ ) from src import paths from src.config import EmissionTableRows, EquipmentTableRows -from utils.tooltips import with_tooltip +from utils.tooltips import with_icon_and_tooltip, with_tooltip @lru_cache(maxsize=1) @@ -162,12 +162,16 @@ def select_load_type(): html.P("Upload your own hourly load data in CSV format."), dcc.Upload( id="upload-data", - children=dbc.Button( - [ - "Upload Custom Data ", - DashIconify(icon="material-symbols:upload", width=20), - ], - color="secondary", + children=with_tooltip( + dbc.Button( + [ + "Upload Custom Data ", + DashIconify(icon="material-symbols:upload", width=20), + ], + color="secondary", + ), + "loads.upload_custom", + position="right", ), accept=".csv", multiple=False, @@ -348,7 +352,14 @@ def modal_load_data_selection(buildings_df: pd.DataFrame): chw_min, chw_max = load_index["chw_max_load"] return dmc.Modal( - title="Load Data Library", + title=with_icon_and_tooltip( + "Load Data Library", + "loads.load_library_docs", + order=5, + icon="basil:book-open-outline", + href="https://cbe-berkeley.gitbook.io/decarb/documentation/loads/load-types", + position="right", + ), children=[ dmc.TextInput( id="building-search-input", @@ -901,7 +912,14 @@ def edit_equipment_modal(): return dmc.Modal( id="equipment-edit-modal", opened=False, - title="Edit equipment scenario", + title=with_icon_and_tooltip( + "Edit equipment scenario", + "equipment.equipment_input_docs", + order=5, + icon="basil:book-open-outline", + href="https://cbe-berkeley.gitbook.io/decarb/documentation/equipment#inputs", + position="right", + ), size="lg", children=dmc.Stack( [ @@ -1890,7 +1908,14 @@ def _options(values): return dmc.Modal( id="emissions-edit-modal", opened=False, - title="Edit emission scenario", + title=with_icon_and_tooltip( + "Edit emission scenario", + "emissions.emissions_input_docs", + order=5, + icon="basil:book-open-outline", + href="https://cbe-berkeley.gitbook.io/decarb/documentation/emissions#inputs", + position="right", + ), size="lg", children=dmc.Stack( [ diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 33c94b3..354ba92 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -27,7 +27,7 @@ create_warning_notification, ) from utils.logging_config import get_logger -from utils.tooltips import with_icon +from utils.tooltips import with_icon_and_tooltip logger = get_logger(__name__) @@ -46,11 +46,12 @@ def layout(): [ dmc.Stack( [ - with_icon( - text="Emissions", + with_icon_and_tooltip( + "Emissions", + "emissions.emissions_docs", order=5, icon="basil:book-open-outline", - href="https://github.com/CenterForTheBuiltEnvironment/decarb-tool", + href="https://cbe-berkeley.gitbook.io/decarb/documentation/emissions", ), dmc.Text( "Specify and select emission scenarios to include in the analysis.", diff --git a/pages/equipment_page.py b/pages/equipment_page.py index edecd9e..f479d63 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -23,7 +23,7 @@ ) from src.config import URLS from utils.logging_config import get_logger -from utils.tooltips import with_icon, with_tooltip +from utils.tooltips import with_icon_and_tooltip, with_tooltip logger = get_logger(__name__) @@ -44,11 +44,12 @@ def layout(): [ dmc.Stack( [ - with_icon( - text="Equipment", + with_icon_and_tooltip( + "Equipment", + "equipment.equipment_docs", order=5, icon="basil:book-open-outline", - href="https://github.com/CenterForTheBuiltEnvironment/decarb-tool", + href="https://cbe-berkeley.gitbook.io/decarb/documentation/equipment", ), dmc.Text( "Specify and select equipment scenarios to include in the analysis.", diff --git a/pages/loads_page.py b/pages/loads_page.py index 14b8541..cd7340f 100644 --- a/pages/loads_page.py +++ b/pages/loads_page.py @@ -34,7 +34,7 @@ from src.metadata import LoadData, Metadata from utils.error_handling import create_success_notification from utils.logging_config import get_logger -from utils.tooltips import TOOLTIPS, with_icon, with_tooltip +from utils.tooltips import TOOLTIPS, with_icon_and_tooltip, with_tooltip logger = get_logger(__name__) @@ -69,11 +69,12 @@ def layout(): dmc.GridCol( dmc.Paper( [ - with_icon( - text="Loads", + with_icon_and_tooltip( + "Loads", + "loads.loads_docs", order=5, icon="basil:book-open-outline", - href="https://github.com/CenterForTheBuiltEnvironment/decarb-tool", + href="https://cbe-berkeley.gitbook.io/decarb/documentation/loads", ), html.Hr(), select_load_type(), diff --git a/utils/tooltips.py b/utils/tooltips.py index 2c6b1b9..7e4d3ff 100644 --- a/utils/tooltips.py +++ b/utils/tooltips.py @@ -26,6 +26,9 @@ # --- Loads Page --- "loads": { "specify_equipment_button": "Specify equipment configurations for this load scenario.", + "loads_docs": "Click to access the documentation on load profiles.", + "load_library_docs": "Click to access the documentation on the load library options.", + "upload_custom": "Ensure the CSV file uses the exact format and units listed in the documentation.", }, # --- Results Page --- "results": { @@ -38,6 +41,13 @@ "edit_eq_scenario": "Edit the equipment configuration for this scenario.", "delete_eq_scenario": "Delete this equipment scenario.", "reset_eq_scenario": "Reset all equipment scenarios to default.", + "equipment_docs": "Click to access the documentation on equipment options and scenarios.", + "equipment_input_docs": "Click to access the documentation on equipment inputs.", + }, + # --- Emissions Page --- + "emissions": { + "emissions_docs": "Click to access the documentation on emissions options and scenarios.", + "emissions_input_docs": "Click to access the documentation on emissions inputs.", }, } @@ -109,3 +119,54 @@ def with_icon( align="center", wrap="nowrap", ) + + +def with_icon_and_tooltip( + text_title: str, + text_tooltip: str, + icon: str, + icon_color: str = "grey", + href: str | None = None, + order: int = 5, + icon_size: int = 18, + gap: int = 6, + target: str = "_blank", + text_props: dict | None = None, + **overrides, +): + """Create a title with an icon and tooltip, optionally wrapped in a link. + Args: + text_title (str): Title text. + text_tooltip (str): Tooltip text or key to resolve from TOOLTIPS dict. + icon (str): Icon identifier for DashIconify. + icon_color (str, optional): Color of the icon. Defaults to "grey". + href (str | None, optional): URL to link the icon to. Defaults to None. + order (int, optional): Title order (1-6). Defaults to 5. + icon_size (int, optional): Size of the icon. Defaults to 18. + gap (int, optional): Gap between title and icon. Defaults to 6. + target (str, optional): Link target attribute. Defaults to "_blank". + text_props (dict, optional): Additional styling props for the tooltip text. + **overrides: Additional props to override default tooltip settings. + Returns: + dmc.Group: Group containing the title and icon with tooltip. + """ + + icon_component = DashIconify(icon=icon, width=icon_size, color=icon_color) + + if href: + icon_component = dmc.Anchor( + icon_component, + href=href, + target=target, + underline="never", + ) + + return dmc.Group( + [ + dmc.Title(text_title, order=order), + with_tooltip(icon_component, text_tooltip, text_props, **overrides), + ], + gap=gap, + align="center", + wrap="nowrap", + ) From d27eb2d9564bb5d19c4588b4a6ee69df66fad4c2 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Mon, 14 Sep 2026 09:11:39 -0700 Subject: [PATCH 34/48] fix: minor adjustments to PR #180 --- pages/emissions_page.py | 4 ++++ src/config.py | 2 +- src/emissions.py | 24 ++++++++++++++++++++++-- src/energy.py | 8 ++------ 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/pages/emissions_page.py b/pages/emissions_page.py index d9e9e67..5157d39 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -310,6 +310,10 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store "year": default_year, } ) + # If the base was a Constant scenario it may have no grid_scenario; restore a + # sensible default so Cambium-based group variants don't fail validation. + if not base_scenario.get("grid_scenario"): + base_scenario["grid_scenario"] = "MidCase" # Reset to default 2/3/4 scenarios (a, b, optionally c & d) with group-specific values updated_scenarios = [] diff --git a/src/config.py b/src/config.py index f79c319..d839377 100644 --- a/src/config.py +++ b/src/config.py @@ -70,7 +70,7 @@ class EmissionScenarioDefaults(Enum): """Default values for emission scenario parameters.""" ELEC_EMISSION_SOURCE: str = "Marginal (Cambium, Long-run)" - ELEC_AVG_EMISSION_RATE_G_KWH: float = None + ELEC_AVG_EMISSION_RATE_G_KWH: float | None = None YEAR: int = 2025 REFRIGERANT_LEAKAGE: float = 0.02 EMISSION_TYPE: str = "Includes pre-combustion" diff --git a/src/emissions.py b/src/emissions.py index dd286e8..fef0f2f 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -1,16 +1,28 @@ from pathlib import Path +from typing import Literal import pandas as pd -from pydantic import BaseModel +from pydantic import BaseModel, model_validator from src import paths from src.mixins import DotAccessMixin +CAMBIUM_SOURCES = ( + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + "Average (Cambium)", +) + class EmissionScenario(DotAccessMixin, BaseModel): em_scen_id: str em_scen_name: str - elec_emission_source: str + elec_emission_source: Literal[ + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + "Average (Cambium)", + "Constant (User-provided)", + ] elec_avg_emission_rate_gCO2e_per_kWh: float | None = None grid_scenario: str | None = None gea_grid_region: str | None = None @@ -19,6 +31,14 @@ class EmissionScenario(DotAccessMixin, BaseModel): ng_emission_rate_gCO2e_per_kWh: float year: int + @model_validator(mode="after") + def check_source_fields(self) -> "EmissionScenario": + if self.elec_emission_source in CAMBIUM_SOURCES and not self.grid_scenario: + raise ValueError( + f"grid_scenario is required for emission source '{self.elec_emission_source}'" + ) + return self + class StandardEmissions: """ diff --git a/src/energy.py b/src/energy.py index cd85c28..c22eca5 100644 --- a/src/energy.py +++ b/src/energy.py @@ -2,7 +2,7 @@ import pandas as pd from src.config import Columns as Col -from src.emissions import get_emissions_data +from src.emissions import CAMBIUM_SOURCES, get_emissions_data from src.equipment import Equipment, EquipmentLibrary, PerformanceCurves from src.loads import StandardLoad from src.metadata import Metadata @@ -1161,11 +1161,7 @@ def site_to_source( base[Col.HOUR.value] = base.index.hour base[Col.DOY.value] = base.index.dayofyear - if em_scen.elec_emission_source in [ - "Marginal (Cambium, Long-run)", - "Marginal (Cambium, Short-run)", - "Average (Cambium)", - ]: + if em_scen.elec_emission_source in CAMBIUM_SOURCES: emissions_data = get_emissions_data(metadata[em_scen_id]) logger.debug( f"Cambium grid emissions: Loaded {len(emissions_data.df)} emission data rows" From 28255781ee4f4f5225e1cacad15dde562c83abde Mon Sep 17 00:00:00 2001 From: Toby Kramer <49641232+t-kramer@users.noreply.github.com> Date: Mon, 14 Sep 2026 10:35:21 -0700 Subject: [PATCH 35/48] Revert "fix: minor adjustments to PR #180" --- pages/emissions_page.py | 4 ---- src/config.py | 2 +- src/emissions.py | 24 ++---------------------- src/energy.py | 8 ++++++-- 4 files changed, 9 insertions(+), 29 deletions(-) diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 5157d39..d9e9e67 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -310,10 +310,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store "year": default_year, } ) - # If the base was a Constant scenario it may have no grid_scenario; restore a - # sensible default so Cambium-based group variants don't fail validation. - if not base_scenario.get("grid_scenario"): - base_scenario["grid_scenario"] = "MidCase" # Reset to default 2/3/4 scenarios (a, b, optionally c & d) with group-specific values updated_scenarios = [] diff --git a/src/config.py b/src/config.py index d839377..f79c319 100644 --- a/src/config.py +++ b/src/config.py @@ -70,7 +70,7 @@ class EmissionScenarioDefaults(Enum): """Default values for emission scenario parameters.""" ELEC_EMISSION_SOURCE: str = "Marginal (Cambium, Long-run)" - ELEC_AVG_EMISSION_RATE_G_KWH: float | None = None + ELEC_AVG_EMISSION_RATE_G_KWH: float = None YEAR: int = 2025 REFRIGERANT_LEAKAGE: float = 0.02 EMISSION_TYPE: str = "Includes pre-combustion" diff --git a/src/emissions.py b/src/emissions.py index fef0f2f..dd286e8 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -1,28 +1,16 @@ from pathlib import Path -from typing import Literal import pandas as pd -from pydantic import BaseModel, model_validator +from pydantic import BaseModel from src import paths from src.mixins import DotAccessMixin -CAMBIUM_SOURCES = ( - "Marginal (Cambium, Long-run)", - "Marginal (Cambium, Short-run)", - "Average (Cambium)", -) - class EmissionScenario(DotAccessMixin, BaseModel): em_scen_id: str em_scen_name: str - elec_emission_source: Literal[ - "Marginal (Cambium, Long-run)", - "Marginal (Cambium, Short-run)", - "Average (Cambium)", - "Constant (User-provided)", - ] + elec_emission_source: str elec_avg_emission_rate_gCO2e_per_kWh: float | None = None grid_scenario: str | None = None gea_grid_region: str | None = None @@ -31,14 +19,6 @@ class EmissionScenario(DotAccessMixin, BaseModel): ng_emission_rate_gCO2e_per_kWh: float year: int - @model_validator(mode="after") - def check_source_fields(self) -> "EmissionScenario": - if self.elec_emission_source in CAMBIUM_SOURCES and not self.grid_scenario: - raise ValueError( - f"grid_scenario is required for emission source '{self.elec_emission_source}'" - ) - return self - class StandardEmissions: """ diff --git a/src/energy.py b/src/energy.py index c22eca5..cd85c28 100644 --- a/src/energy.py +++ b/src/energy.py @@ -2,7 +2,7 @@ import pandas as pd from src.config import Columns as Col -from src.emissions import CAMBIUM_SOURCES, get_emissions_data +from src.emissions import get_emissions_data from src.equipment import Equipment, EquipmentLibrary, PerformanceCurves from src.loads import StandardLoad from src.metadata import Metadata @@ -1161,7 +1161,11 @@ def site_to_source( base[Col.HOUR.value] = base.index.hour base[Col.DOY.value] = base.index.dayofyear - if em_scen.elec_emission_source in CAMBIUM_SOURCES: + if em_scen.elec_emission_source in [ + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + "Average (Cambium)", + ]: emissions_data = get_emissions_data(metadata[em_scen_id]) logger.debug( f"Cambium grid emissions: Loaded {len(emissions_data.df)} emission data rows" From 78800ba1d2602f4c51195320d040e1367a937e41 Mon Sep 17 00:00:00 2001 From: Toby Kramer <49641232+t-kramer@users.noreply.github.com> Date: Mon, 14 Sep 2026 10:37:12 -0700 Subject: [PATCH 36/48] Revert "Average emissions factors #52" --- data/input/metadata_index.json | 6 -- layout/charts.py | 2 +- layout/input.py | 76 ++++++--------- pages/emissions_page.py | 163 +++++++-------------------------- src/config.py | 19 +--- src/emissions.py | 24 ++--- src/energy.py | 162 +++++++++++--------------------- src/metadata.py | 12 +-- tests/conftest.py | 4 +- utils/units.py | 5 +- 10 files changed, 136 insertions(+), 337 deletions(-) diff --git a/data/input/metadata_index.json b/data/input/metadata_index.json index 76a81fe..b36d172 100644 --- a/data/input/metadata_index.json +++ b/data/input/metadata_index.json @@ -63,12 +63,6 @@ ] }, "emissions": { - "elec_emission_source" : [ - "Marginal (Cambium, Long-run)", - "Marginal (Cambium, Short-run)", - "Average (Cambium)", - "Constant (User-provided)" - ], "year": [ 2025, 2030, diff --git a/layout/charts.py b/layout/charts.py index 523ce35..2e9704b 100644 --- a/layout/charts.py +++ b/layout/charts.py @@ -54,7 +54,7 @@ def emissions_bar_chart(): dmc.MultiSelect( id="emission-em-scen-dropdown", data=_emission_scen_seed(), # will be overwritten dynamically - value=["em_scenario_a", "em_scenario_b", "em_scenario_c", "em_scenario_d"], + value=["em_scenario_a", "em_scenario_b", "em_scenario_c"], placeholder="Emission Scenarios", searchable=True, clearable=True, diff --git a/layout/input.py b/layout/input.py index 3af1f1d..e1e3517 100644 --- a/layout/input.py +++ b/layout/input.py @@ -1163,7 +1163,7 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un view_mode: One of "simple", "advanced", or "differences" unit_mode: "SI" or "IP" for unit conversion """ - from utils.units import get_converter, get_display_unit + from utils.units import get_unit_converter, get_unit_label emission_df = pd.DataFrame(emission_data) if isinstance(emission_data, list) else emission_data @@ -1181,22 +1181,16 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un # Sort for stable column order emission_df = emission_df.sort_values("em_scen_id").reset_index(drop=True) - # Get unit label for emission rates (dynamic based on unit_mode) - ng_emission_rate_unit = get_display_unit("gas_emission_factor", unit_mode) - elec_emission_rate_unit = get_display_unit("emissions_rate", unit_mode) + # Get unit label for NG emission rate (dynamic based on unit_mode) + ng_emission_rate_unit = get_unit_label("emissions_rate", unit_mode) # Rows to display (property name, label) # Note: em_scen_id is excluded as it's shown in the header row_config = [ - ("em_scen_name", "Scenario"), - ("elec_emission_source", "Grid emissions source"), - ( - "elec_avg_emission_rate_gCO2e_per_kWh", - f"Constant grid emissions rate ({elec_emission_rate_unit})", - ), ("grid_scenario", "Grid Scenario"), ("gea_grid_region", "GEA Grid Region"), ("emission_type", "Emission Type"), + ("shortrun_weighting", "Short-run weighting"), ("annual_refrig_leakage_percent", "Refrigerant leakage (frac)"), ( "ng_emission_rate_gCO2e_per_kWh", @@ -1325,9 +1319,8 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un # ---------- Property rows ---------- diff_row_style = TABLE_STYLE.diff_row_style - # Get converter for emission rate values - ng_emission_rate_converter = get_converter("gas_emission_factor", unit_mode) - elec_emission_rate_converter = get_converter("emissions_rate", unit_mode) + # Get converter for NG emission rate values + ng_emission_rate_converter = get_unit_converter("emissions_rate", unit_mode) for field, label in available_rows: is_diff_row = field in diff_fields @@ -1342,19 +1335,13 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un for idx, scen_id in enumerate(scen_ids): raw_value = emission_df.iloc[idx].get(field, "") - # Apply unit conversion for emission rates + # Apply unit conversion for NG emission rate if field == "ng_emission_rate_gCO2e_per_kWh" and raw_value is not None: try: converted = ng_emission_rate_converter(float(raw_value)) display_value = f"{converted:.2f}" except (ValueError, TypeError): display_value = format_table_value(raw_value, field_name=field) - elif field == "elec_avg_emission_rate_gCO2e_per_kWh" and raw_value is not None: - try: - converted = elec_emission_rate_converter(float(raw_value)) - display_value = f"{converted:.2f}" - except (ValueError, TypeError): - display_value = format_table_value(raw_value, field_name=field) else: display_value = format_table_value(raw_value, field_name=field) @@ -1923,36 +1910,6 @@ def _options(values): ], grow=True, ), - dmc.SimpleGrid( - cols=2, - spacing="md", - children=[ - dmc.Select( - id="edit-em-elec-source", - label="Grid emissions source", - placeholder="Select grid emissions source", - data=_options(emissions_index["elec_emission_source"]), - searchable=True, - clearable=False, - ), - dmc.Stack( - [ - dmc.Text( - id="edit-em-elec-emission-rate-label", - children="Constant grid emissions rate (g/kWh)", - size="sm", - fw=500, - ), - dmc.NumberInput( - id="edit-em-elec-avg-emission-rate", - min=0, - step=1, - ), - ], - gap=4, - ), - ], - ), dmc.SimpleGrid( cols=2, spacing="md", @@ -1979,6 +1936,12 @@ def _options(values): cols=2, spacing="md", children=[ + dmc.TextInput( + id="edit-em-time-zone", + label="Time zone", + placeholder="e.g. America/Los_Angeles", + disabled=True, + ), dmc.Select( id="edit-em-emission-type", label="Emission type", @@ -1987,6 +1950,19 @@ def _options(values): searchable=False, clearable=False, ), + ], + ), + dmc.SimpleGrid( + cols=2, + spacing="md", + children=[ + dmc.NumberInput( + id="edit-em-shortrun-weighting", + label="Short-run weighting", + min=0, + max=1, + step=0.1, + ), dmc.Select( id="edit-em-year", label="Year", diff --git a/pages/emissions_page.py b/pages/emissions_page.py index d9e9e67..33c94b3 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -100,10 +100,6 @@ def layout(): "label": "Combustion vs pre-combustion", "value": "emission_types", }, - { - "label": "Different electricity emission factors", - "value": "emission_sources", - }, ], value=None, placeholder="Select a scenario group", @@ -239,7 +235,6 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store - year: Varies years (2025, 2035, 2045), others reset to defaults - refrigerant_leakage: Varies leakage (0.01, 0.05, 0.1), others reset to defaults - emission_types: Varies emission type ("Includes pre-combustion" vs "Combustion only"), others reset to defaults - - emission_sources: Varies emission source (average and marginal) and associated values, others reset to defaults """ # When dropdown is cleared, clear the stored group to allow re-selecting if not group_id: @@ -262,12 +257,8 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store default_ids = ["em_scenario_a", "em_scenario_b"] if group_id != "emission_types": # only two scenarios for comparing emission types default_ids.append("em_scenario_c") - if group_id == "emission_sources": # fourth scenario for comparing emission sources - default_ids.append("em_scenario_d") # Get defaults - default_elec_emission_source = EmissionScenarioDefaults.ELEC_EMISSION_SOURCE.value - default_elec_avg_emission_rate = EmissionScenarioDefaults.ELEC_AVG_EMISSION_RATE_G_KWH.value default_year = EmissionScenarioDefaults.YEAR.value default_leakage = EmissionScenarioDefaults.REFRIGERANT_LEAKAGE.value default_emission_type = EmissionScenarioDefaults.EMISSION_TYPE.value @@ -281,37 +272,24 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store EmissionScenarioDefaults.NG_EMISSION_RATE_G_KWH_COMBUSTION.value, default_ng_emission_rate, ] - elec_emission_source_values = [ - "Average (Cambium)", - "Constant (User-provided)", - "Marginal (Cambium, Long-run)", - "Marginal (Cambium, Short-run)", - ] - elec_avg_emission_rate_values = [None, 0, None, None] - emission_sources_names = [ - "Cambium Average Emissions", - "Constant (Zero) Emissions", - "Long-run Marginal Emissions", - "Short-run Marginal Emissions", - ] # Create base scenario template from first existing scenario or defaults base_scenario = ( existing_scenarios[0].copy() if existing_scenarios else { - "elec_emission_source": default_elec_emission_source, - "elec_avg_emission_rate_gCO2e_per_kWh": default_elec_avg_emission_rate, "grid_scenario": "MidCase", "gea_grid_region": None, + "time_zone": "America/Los_Angeles", "emission_type": default_emission_type, + "shortrun_weighting": 0, "annual_refrig_leakage_percent": default_leakage, "ng_emission_rate_gCO2e_per_kWh": default_ng_emission_rate, "year": default_year, } ) - # Reset to default 2/3/4 scenarios (a, b, optionally c & d) with group-specific values + # Reset to default 2/3 scenarios (a, b, optionally c) with group-specific values updated_scenarios = [] for idx, scen_id in enumerate(default_ids): scen = {**base_scenario, "em_scen_id": scen_id, "em_scen_name": ""} @@ -319,53 +297,27 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store if group_id == "year": # Vary year, reset others to defaults scen["year"] = year_values[idx % len(year_values)] - scen["em_scen_name"] = str(scen["year"]) - scen["annual_refrig_leakage_percent"] = default_leakage scen["emission_type"] = default_emission_type scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate - scen["elec_emission_source"] = default_elec_emission_source - scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate + scen["em_scen_name"] = str(scen["year"]) elif group_id == "refrigerant_leakage": # Vary leakage, reset others to defaults scen["annual_refrig_leakage_percent"] = leakage_values[idx % len(leakage_values)] - pct_leakage = scen["annual_refrig_leakage_percent"] * 100 - scen["em_scen_name"] = f"{pct_leakage:.0f}% leakage" - scen["year"] = default_year scen["emission_type"] = default_emission_type scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate - scen["elec_emission_source"] = default_elec_emission_source - scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate + pct_leakage = scen["annual_refrig_leakage_percent"] * 100 + scen["em_scen_name"] = f"{pct_leakage:.0f}% leakage" elif group_id == "emission_types": # Set emission type, reset others to defaults scen["emission_type"] = emission_types[idx % len(emission_types)] scen["ng_emission_rate_gCO2e_per_kWh"] = ng_emission_rate_values[ idx % len(ng_emission_rate_values) ] - scen["em_scen_name"] = scen["emission_type"] - - scen["year"] = default_year - scen["annual_refrig_leakage_percent"] = default_leakage - scen["elec_emission_source"] = default_elec_emission_source - scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate - elif group_id == "emission_sources": - # Vary source, avg emissions rate, and short-run weighting, reset others to defaults - scen["elec_emission_source"] = elec_emission_source_values[ - idx % len(elec_emission_source_values) - ] - scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate_values[ - idx % len(elec_avg_emission_rate_values) - ] - scen["em_scen_name"] = emission_sources_names[idx % len(emission_sources_names)] - if scen["elec_emission_source"] == "Constant (User-provided)": - scen["grid_scenario"] = None - scen["gea_grid_region"] = None - scen["year"] = default_year scen["annual_refrig_leakage_percent"] = default_leakage - scen["emission_type"] = default_emission_type - scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate + scen["em_scen_name"] = scen["emission_type"] updated_scenarios.append(scen) @@ -603,11 +555,11 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): Output("emissions-edit-modal", "opened"), Output("edit-em-scenario-id-input", "value"), Output("edit-em-scenario-name-input", "value"), - Output("edit-em-elec-source", "value"), - Output("edit-em-elec-avg-emission-rate", "value"), Output("edit-em-grid-scenario", "value"), Output("edit-em-gea-grid-region", "value"), + Output("edit-em-time-zone", "value"), Output("edit-em-emission-type", "value"), + Output("edit-em-shortrun-weighting", "value"), Output("edit-em-year", "value"), Output("edit-em-refrig-leakage", "value"), Output("edit-em-ng-emission-rate", "value"), @@ -627,13 +579,13 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", - None, "", "", "", None, None, None, + None, "No emission data.", ) @@ -654,13 +606,13 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", - None, "", "", "", None, None, None, + None, "Failed to parse button id.", ) @@ -673,53 +625,44 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", - None, "", "", "", None, None, None, + None, f"Scenario {em_scen_id!r} not found.", ) - # Convert emissions rates for display based on unit mode - from utils.units import get_converter - + # Convert NG emissions rate for display based on unit mode ng_emission_rate_base = scen.get("ng_emission_rate_gCO2e_per_kWh") if ng_emission_rate_base is not None and unit_mode == "IP": - ng_converter = get_converter("gas_emission_factor", "IP") + from utils.units import get_unit_converter + + ng_converter = get_unit_converter("emissions_rate", "IP") ng_emission_rate_display = ng_converter(float(ng_emission_rate_base)) else: ng_emission_rate_display = ng_emission_rate_base - elec_avg_emission_rate_base = scen.get("elec_avg_emission_rate_gCO2e_per_kWh") - if elec_avg_emission_rate_base is not None and unit_mode == "IP": - elec_converter = get_converter("emissions_rate", "IP") - elec_avg_emission_rate_display = elec_converter(float(elec_avg_emission_rate_base)) - else: - elec_avg_emission_rate_display = elec_avg_emission_rate_base - # Round refrigerant leakage to 2 decimal places for display refrig_leakage = scen.get("annual_refrig_leakage_percent") if refrig_leakage is not None: refrig_leakage = round(float(refrig_leakage), 2) - # Round emission rate display to 2 decimal places + # Round NG emission rate display to 2 decimal places if ng_emission_rate_display is not None: ng_emission_rate_display = round(float(ng_emission_rate_display), 2) - if elec_avg_emission_rate_display is not None: - elec_avg_emission_rate_display = round(float(elec_avg_emission_rate_display), 2) return ( True, scen.get("em_scen_id"), scen.get("em_scen_name", ""), - scen.get("elec_emission_source", ""), - elec_avg_emission_rate_display, scen.get("grid_scenario", ""), scen.get("gea_grid_region", ""), + scen.get("time_zone", ""), scen.get("emission_type", ""), + scen.get("shortrun_weighting"), str(scen.get("year")) if scen.get("year") is not None else "", refrig_leakage, ng_emission_rate_display, @@ -734,11 +677,11 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): Input("edit-em-scenario-save-btn", "n_clicks"), State("edit-em-scenario-id-input", "value"), State("edit-em-scenario-name-input", "value"), - State("edit-em-elec-source", "value"), - State("edit-em-elec-avg-emission-rate", "value"), State("edit-em-grid-scenario", "value"), State("edit-em-gea-grid-region", "value"), + State("edit-em-time-zone", "value"), State("edit-em-emission-type", "value"), + State("edit-em-shortrun-weighting", "value"), State("edit-em-year", "value"), State("edit-em-refrig-leakage", "value"), State("edit-em-ng-emission-rate", "value"), @@ -750,11 +693,11 @@ def save_edit_emission( n_clicks, scen_id, scen_name, - elec_emission_source, - elec_avg_emission_rate, grid_scenario, gea_grid_region, + time_zone, emission_type, + shortrun_weighting, year, refrig_leakage, ng_emission_rate, @@ -771,6 +714,11 @@ def save_edit_emission( return True, no_update, "Scenario ID is missing." # basic type cleaning + try: + shortrun_weighting = float(shortrun_weighting) if shortrun_weighting is not None else 0.0 + except (TypeError, ValueError): + shortrun_weighting = 0.0 + try: year = int(year) if year is not None and year != "" else 2025 except (TypeError, ValueError): @@ -786,14 +734,6 @@ def save_edit_emission( except (TypeError, ValueError): ng_emission_rate = 0.0 - try: - elec_avg_emission_rate = ( - float(elec_avg_emission_rate) if elec_avg_emission_rate is not None else None - ) - except (TypeError, ValueError): - elec_avg_emission_rate = None - # default avg emission rate is None to generate an error if calculation is run without a valid input - # Convert NG emissions rate back to base units (g/kWh) if in IP mode unit_mode = unit_mode or "SI" if unit_mode == "IP" and ng_emission_rate > 0: @@ -803,13 +743,6 @@ def save_edit_emission( # g/kWh = (lb/kBTU) / (g_to_lb / Wh_to_BTU) ng_emission_rate = ng_emission_rate / (g_to_lb / Wh_to_BTU) - if unit_mode == "IP" and elec_avg_emission_rate is not None: - from utils.units import g_to_lb - - # IP unit is lb/kWh, convert back to g/kWh - # g/kWh = (lb/kWh) / (g_to_lb) - elec_avg_emission_rate = elec_avg_emission_rate / (g_to_lb) - scenarios = metadata_data.get("emission_settings", []) updated = False new_scenarios = [] @@ -818,11 +751,11 @@ def save_edit_emission( if scen.get("em_scen_id") == scen_id: new_scen = scen.copy() new_scen["em_scen_name"] = scen_name or scen.get("em_scen_name", "") - new_scen["elec_emission_source"] = elec_emission_source - new_scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate new_scen["grid_scenario"] = grid_scenario new_scen["gea_grid_region"] = gea_grid_region + new_scen["time_zone"] = time_zone new_scen["emission_type"] = emission_type + new_scen["shortrun_weighting"] = shortrun_weighting new_scen["year"] = year new_scen["annual_refrig_leakage_percent"] = refrig_leakage new_scen["ng_emission_rate_gCO2e_per_kWh"] = ng_emission_rate @@ -853,18 +786,15 @@ def cancel_edit_emission_modal(n_clicks): @callback( Output("edit-em-ng-emission-rate-label", "children"), - Output("edit-em-elec-emission-rate-label", "children"), Input("unit-toggle", "value"), ) -def update_emissions_rate_label(unit_mode): - """Update NG/elec emissions rate label based on unit mode.""" - from utils.units import get_display_unit +def update_ng_emissions_rate_label(unit_mode): + """Update NG emissions rate label based on unit mode.""" + from utils.units import get_unit_label unit_mode = unit_mode or "SI" - ng_unit = get_display_unit("gas_emission_factor", unit_mode) - elec_unit = get_display_unit("emissions_rate", unit_mode) - - return f"Gas emissions rate ({ng_unit})", f"Constant grid emissions rate ({elec_unit})" + ng_unit = get_unit_label("emissions_rate", unit_mode) + return f"Gas emissions rate ({ng_unit})" @callback( @@ -1006,26 +936,3 @@ def update_ng_rate_on_emission_type_change(emission_type, unit_mode): ) return ng_emission_rate - - -@callback( - Output("edit-em-elec-avg-emission-rate", "disabled"), - Output("edit-em-grid-scenario", "value", allow_duplicate=True), - Output("edit-em-gea-grid-region", "value", allow_duplicate=True), - Input("edit-em-elec-source", "value"), - State("edit-em-grid-scenario", "value"), - State("edit-em-gea-grid-region", "value"), - prevent_initial_call=True, -) -def update_emission_inputs_on_source_change(emission_source, grid_scenario, grid_region): - """Update emissions inputs when emission source changes to fixed user-provided value.""" - - # disable average emissions rate input - disable_avg = emission_source != "Constant (User-provided)" - - # blank out cambium-related inputs - if not disable_avg: - grid_scenario = None - grid_region = None - - return disable_avg, grid_scenario, grid_region diff --git a/src/config.py b/src/config.py index f79c319..4c3338b 100644 --- a/src/config.py +++ b/src/config.py @@ -44,22 +44,12 @@ class EquipmentTableRows(Enum): class EmissionTableRows(Enum): """Row configurations for emission table view modes.""" - SIMPLE = ( - "em_scen_name", - "elec_emission_source", - "elec_avg_emission_rate_gCO2e_per_kWh", - "grid_scenario", - "gea_grid_region", - "emission_type", - "year", - ) + SIMPLE = ("grid_scenario", "gea_grid_region", "emission_type", "year") ADVANCED = ( - "em_scen_name", - "elec_emission_source", - "elec_avg_emission_rate_gCO2e_per_kWh", "grid_scenario", "gea_grid_region", "emission_type", + "shortrun_weighting", "annual_refrig_leakage_percent", "ng_emission_rate_gCO2e_per_kWh", "year", @@ -69,8 +59,6 @@ class EmissionTableRows(Enum): class EmissionScenarioDefaults(Enum): """Default values for emission scenario parameters.""" - ELEC_EMISSION_SOURCE: str = "Marginal (Cambium, Long-run)" - ELEC_AVG_EMISSION_RATE_G_KWH: float = None YEAR: int = 2025 REFRIGERANT_LEAKAGE: float = 0.02 EMISSION_TYPE: str = "Includes pre-combustion" @@ -170,9 +158,6 @@ class Columns(StrEnum): SRMER_CO2E_C = "srmer_co2e_c" SRMER_CO2E_P = "srmer_co2e_p" SRMER_CO2E = "srmer_co2e" - AER_LOAD_CO2E_C = "aer_load_co2e_c" - AER_LOAD_CO2E_P = "aer_load_co2e_p" - AER_LOAD_CO2E = "aer_load_co2e" SHORTRUN_WEIGHTING = "shortrun_weighting" ELEC_EMISSIONS_RATE_G_PER_KWH = "elec_emissions_rate_gCO2e_per_kWh" diff --git a/src/emissions.py b/src/emissions.py index dd286e8..2c39029 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -10,11 +10,11 @@ class EmissionScenario(DotAccessMixin, BaseModel): em_scen_id: str em_scen_name: str - elec_emission_source: str - elec_avg_emission_rate_gCO2e_per_kWh: float | None = None - grid_scenario: str | None = None + grid_scenario: str gea_grid_region: str | None = None + time_zone: str emission_type: str + shortrun_weighting: float annual_refrig_leakage_percent: float ng_emission_rate_gCO2e_per_kWh: float year: int @@ -24,7 +24,7 @@ class StandardEmissions: """ Unified interface for emissions data. Canonical schema: - emission_scenario | gea_grid_region | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p | aer_load_co2e_c | aer_load_co2e_p + emission_scenario | gea_grid_region | time_zone | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p """ def __init__(self, df: pd.DataFrame): @@ -36,13 +36,12 @@ def _validate(df: pd.DataFrame) -> pd.DataFrame: "emission_scenario", "gea_grid_region", "year", + "time_zone", "timestamp", "lrmer_co2e_c", "lrmer_co2e_p", "srmer_co2e_c", "srmer_co2e_p", - "aer_load_co2e_c", - "aer_load_co2e_p", ] missing = [c for c in required if c not in df.columns] if missing: @@ -55,14 +54,7 @@ def _validate(df: pd.DataFrame) -> pd.DataFrame: df = df.sort_values("timestamp").set_index("timestamp") # enforce numeric - for col in [ - "lrmer_co2e_c", - "lrmer_co2e_p", - "srmer_co2e_c", - "srmer_co2e_p", - "aer_load_co2e_c", - "aer_load_co2e_p", - ]: + for col in ["lrmer_co2e_c", "lrmer_co2e_p", "srmer_co2e_c", "srmer_co2e_p"]: df[col] = pd.to_numeric(df[col], errors="coerce") if df[col].isnull().any(): raise ValueError(f"Invalid numeric values in column {col}") @@ -115,6 +107,7 @@ def get_emissions_data( "em_scen_id": scenario.em_scen_id, "emission_scenario": scenario.grid_scenario, "gea_grid_region": scenario.gea_grid_region, + "time_zone": scenario.time_zone, "emission_type": scenario.emission_type, "year": df["year"], "timestamp": df["timestamp"], @@ -124,9 +117,6 @@ def get_emissions_data( "srmer_co2e_c": df["srmer_co2e_c"], "srmer_co2e_p": df["srmer_co2e_p"], "srmer_co2e": df["srmer_co2e"], - "aer_load_co2e_c": df["aer_load_co2e_c"], - "aer_load_co2e_p": df["aer_load_co2e_p"], - "aer_load_co2e": df["aer_load_co2e"], } ) diff --git a/src/energy.py b/src/energy.py index cd85c28..e41c0d0 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1149,7 +1149,12 @@ def site_to_source( f"Processing emission scenario: {em_scen_id}, year={metadata[em_scen_id].year}" ) + emissions_data = get_emissions_data(metadata[em_scen_id]) + logger.debug(f"Loaded {len(emissions_data.df)} emission data rows") + em_scen = metadata[em_scen_id] + + shortrun_weighting = float(em_scen.shortrun_weighting) annual_refrig_leakage_percent = float(em_scen.annual_refrig_leakage_percent) gas_emissions_rate = float(em_scen.ng_emission_rate_gCO2e_per_kWh) @@ -1161,117 +1166,62 @@ def site_to_source( base[Col.HOUR.value] = base.index.hour base[Col.DOY.value] = base.index.dayofyear - if em_scen.elec_emission_source in [ - "Marginal (Cambium, Long-run)", - "Marginal (Cambium, Short-run)", - "Average (Cambium)", - ]: - emissions_data = get_emissions_data(metadata[em_scen_id]) - logger.debug( - f"Cambium grid emissions: Loaded {len(emissions_data.df)} emission data rows" - ) - - # collapse emissions to month-hour averages - emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month - emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour - group_cols = [Col.MONTH.value, Col.HOUR.value] - - if em_scen.elec_emission_source == "Average (Cambium)": - # all rates are in gCO2e/kWh - if em_scen.emission_type == "Combustion only": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = emissions_data.df[ - Col.AER_LOAD_CO2E_C.value - ] - elif em_scen.emission_type == "Includes pre-combustion": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - emissions_data.df[Col.AER_LOAD_CO2E_C.value] - + emissions_data.df[Col.AER_LOAD_CO2E_P.value] - ) - else: - raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") - - df_em = ( - emissions_data.df.groupby(group_cols)[ - [ - Col.ELEC_EMISSIONS_RATE_G_PER_KWH, - Col.AER_LOAD_CO2E_C.value, - Col.AER_LOAD_CO2E_P.value, - Col.AER_LOAD_CO2E.value, - ] - ] - .mean() - .reset_index() + # collapse emissions to month-hour averages + emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month + emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour + emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting + group_cols = [Col.MONTH.value, Col.HOUR.value] + + # all rates are in gCO2e/kWh + if em_scen.emission_type == "Combustion only": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) + ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) + elif em_scen.emission_type == "Includes pre-combustion": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + ( + emissions_data.df[Col.LRMER_CO2E_C.value] + + emissions_data.df[Col.LRMER_CO2E_P.value] ) - else: - if em_scen.elec_emission_source == "Marginal (Cambium, Long-run)": - shortrun_weighting = 0 - elif em_scen.elec_emission_source == "Marginal (Cambium, Short-run)": - shortrun_weighting = 1 - emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting - - # all rates are in gCO2e/kWh - if em_scen.emission_type == "Combustion only": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) - ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) - elif em_scen.emission_type == "Includes pre-combustion": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - ( - emissions_data.df[Col.LRMER_CO2E_C.value] - + emissions_data.df[Col.LRMER_CO2E_P.value] - ) - * (1 - shortrun_weighting) - ) + ( - ( - emissions_data.df[Col.SRMER_CO2E_C.value] - + emissions_data.df[Col.SRMER_CO2E_P.value] - ) - * shortrun_weighting - ) - else: - raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") - - df_em = ( - emissions_data.df.groupby(group_cols)[ - [ - Col.ELEC_EMISSIONS_RATE_G_PER_KWH, - Col.LRMER_CO2E_C.value, - Col.LRMER_CO2E_P.value, - Col.LRMER_CO2E.value, - Col.SRMER_CO2E_C.value, - Col.SRMER_CO2E_P.value, - Col.SRMER_CO2E.value, - Col.SHORTRUN_WEIGHTING.value, - ] - ] - .mean() - .reset_index() + * (1 - shortrun_weighting) + ) + ( + ( + emissions_data.df[Col.SRMER_CO2E_C.value] + + emissions_data.df[Col.SRMER_CO2E_P.value] ) + * shortrun_weighting + ) + else: + raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") + + df_em = ( + emissions_data.df.groupby(group_cols)[ + [ + Col.ELEC_EMISSIONS_RATE_G_PER_KWH, + Col.LRMER_CO2E_C.value, + Col.LRMER_CO2E_P.value, + Col.LRMER_CO2E.value, + Col.SRMER_CO2E_C.value, + Col.SRMER_CO2E_P.value, + Col.SRMER_CO2E.value, + Col.SHORTRUN_WEIGHTING.value, + ] + ] + .mean() + .reset_index() + ) - # expand loads with this year's emissions - merged = base.merge(df_em, on=[Col.MONTH.value, Col.HOUR.value], how="left") - - nan_count = merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH].isna().sum() - if nan_count > 0: - logger.warning(f"Merge produced {nan_count} rows with missing emission rates") - - # Note: Keep original load data year (already extracted above) for timestamp - # reconstruction. This avoids Feb 29 errors when leap year load data is - # used with non-leap emission scenario years. Emissions are still correct - # because they're matched by month+hour pattern. - - elif em_scen.elec_emission_source == "Constant (User-provided)": - elec_avg_emission_rate = em_scen.elec_avg_emission_rate_gCO2e_per_kWh - if elec_avg_emission_rate is not None and elec_avg_emission_rate >= 0: - logger.debug(f"Constant grid emissions rate: {elec_avg_emission_rate} gCO2e/kWh") + # expand loads with this year's emissions + merged = base.merge(df_em, on=[Col.MONTH.value, Col.HOUR.value], how="left") - merged = base.copy() - merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = float(elec_avg_emission_rate) - else: - raise ValueError("Provide a valid input value for constant grid emissions rate.") + nan_count = merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH].isna().sum() + if nan_count > 0: + logger.warning(f"Merge produced {nan_count} rows with missing emission rates") - else: - raise ValueError(f"Invalid elec_emissions_source: {em_scen.elec_emission_source}") + # Note: Keep original load data year (already extracted above) for timestamp + # reconstruction. This avoids Feb 29 errors when leap year load data is + # used with non-leap emission scenario years. Emissions are still correct + # because they're matched by month+hour pattern. ## fuel switching logic emissions_intensity_HP = ( diff --git a/src/metadata.py b/src/metadata.py index f4ca6e4..76740e9 100644 --- a/src/metadata.py +++ b/src/metadata.py @@ -97,11 +97,11 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_a", em_scen_name="2025", - elec_emission_source="Marginal (Cambium, Long-run)", - elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, + time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", + shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2025, @@ -109,11 +109,11 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_b", em_scen_name="2035", - elec_emission_source="Marginal (Cambium, Long-run)", - elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, + time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", + shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2035, @@ -121,11 +121,11 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_c", em_scen_name="2045", - elec_emission_source="Marginal (Cambium, Long-run)", - elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, + time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", + shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2045, diff --git a/tests/conftest.py b/tests/conftest.py index 953b9c2..80ec79b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -54,11 +54,11 @@ def emission_scenario(): """Create a sample emission scenario for testing.""" return EmissionScenario( em_scen_id="test_em_1", - elec_emission_source="Marginal (Cambium, Long-run)", - elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region="CAMX", + time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", + shortrun_weighting=0.0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2025, diff --git a/utils/units.py b/utils/units.py index 7ad45be..707945f 100644 --- a/utils/units.py +++ b/utils/units.py @@ -185,7 +185,7 @@ def sqft_to_sqm(sqft): "emissions_rate": { "base": "g CO₂e/kWh", "SI": {"unit": "g CO₂e/kWh", "func": lambda x: x}, - "IP": {"unit": "lb CO₂e/kWh", "func": lambda x: x * g_to_lb}, + "IP": {"unit": "lb CO₂e/kBTU", "func": lambda x: x * g_to_lb / Wh_to_BTU}, }, # --- Gas emission factor --- "gas_emission_factor": { @@ -298,8 +298,6 @@ def sqft_to_sqm(sqft): "lrmer_co2e_p": ("emissions_rate", "LRMER Pre-combustion"), "srmer_co2e_c": ("emissions_rate", "SRMER Combustion"), "srmer_co2e_p": ("emissions_rate", "SRMER Pre-combustion"), - "aer_load_co2e_c": ("emissions_rate", "AER Load Combustion"), - "aer_load_co2e_p": ("emissions_rate", "AER Load Pre-combustion"), "ng_emission_rate_gCO2e_per_kWh": ("gas_emission_factor", "Gas Emissions Rate"), # === Refrigerant Mass (kg) === "hr_wwhp_refrigerant_weight_kg": ("mass", "HR-WWHP Refrig Weight"), @@ -329,7 +327,6 @@ def sqft_to_sqm(sqft): # === Emission Scenario Parameters === "lrmer_co2e": (None, "LRMER CO₂e"), "srmer_co2e": (None, "SRMER CO₂e"), - "aer_load_co2e": (None, "AER Load CO₂e"), "shortrun_weighting": (None, "Short-run Weighting"), "year": (None, "Year"), # === Scenario Identifiers === From 338fe9ff9b55a6a4517fda07b66bc91d833f3a22 Mon Sep 17 00:00:00 2001 From: Toby Kramer <49641232+t-kramer@users.noreply.github.com> Date: Mon, 14 Sep 2026 13:42:37 -0700 Subject: [PATCH 37/48] Revert "Revert "Average emissions factors #52"" --- data/input/metadata_index.json | 6 ++ layout/charts.py | 2 +- layout/input.py | 76 +++++++++------ pages/emissions_page.py | 163 ++++++++++++++++++++++++++------- src/config.py | 19 +++- src/emissions.py | 24 +++-- src/energy.py | 162 +++++++++++++++++++++----------- src/metadata.py | 12 +-- tests/conftest.py | 4 +- utils/units.py | 5 +- 10 files changed, 337 insertions(+), 136 deletions(-) diff --git a/data/input/metadata_index.json b/data/input/metadata_index.json index b36d172..76a81fe 100644 --- a/data/input/metadata_index.json +++ b/data/input/metadata_index.json @@ -63,6 +63,12 @@ ] }, "emissions": { + "elec_emission_source" : [ + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + "Average (Cambium)", + "Constant (User-provided)" + ], "year": [ 2025, 2030, diff --git a/layout/charts.py b/layout/charts.py index 2e9704b..523ce35 100644 --- a/layout/charts.py +++ b/layout/charts.py @@ -54,7 +54,7 @@ def emissions_bar_chart(): dmc.MultiSelect( id="emission-em-scen-dropdown", data=_emission_scen_seed(), # will be overwritten dynamically - value=["em_scenario_a", "em_scenario_b", "em_scenario_c"], + value=["em_scenario_a", "em_scenario_b", "em_scenario_c", "em_scenario_d"], placeholder="Emission Scenarios", searchable=True, clearable=True, diff --git a/layout/input.py b/layout/input.py index e1e3517..3af1f1d 100644 --- a/layout/input.py +++ b/layout/input.py @@ -1163,7 +1163,7 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un view_mode: One of "simple", "advanced", or "differences" unit_mode: "SI" or "IP" for unit conversion """ - from utils.units import get_unit_converter, get_unit_label + from utils.units import get_converter, get_display_unit emission_df = pd.DataFrame(emission_data) if isinstance(emission_data, list) else emission_data @@ -1181,16 +1181,22 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un # Sort for stable column order emission_df = emission_df.sort_values("em_scen_id").reset_index(drop=True) - # Get unit label for NG emission rate (dynamic based on unit_mode) - ng_emission_rate_unit = get_unit_label("emissions_rate", unit_mode) + # Get unit label for emission rates (dynamic based on unit_mode) + ng_emission_rate_unit = get_display_unit("gas_emission_factor", unit_mode) + elec_emission_rate_unit = get_display_unit("emissions_rate", unit_mode) # Rows to display (property name, label) # Note: em_scen_id is excluded as it's shown in the header row_config = [ + ("em_scen_name", "Scenario"), + ("elec_emission_source", "Grid emissions source"), + ( + "elec_avg_emission_rate_gCO2e_per_kWh", + f"Constant grid emissions rate ({elec_emission_rate_unit})", + ), ("grid_scenario", "Grid Scenario"), ("gea_grid_region", "GEA Grid Region"), ("emission_type", "Emission Type"), - ("shortrun_weighting", "Short-run weighting"), ("annual_refrig_leakage_percent", "Refrigerant leakage (frac)"), ( "ng_emission_rate_gCO2e_per_kWh", @@ -1319,8 +1325,9 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un # ---------- Property rows ---------- diff_row_style = TABLE_STYLE.diff_row_style - # Get converter for NG emission rate values - ng_emission_rate_converter = get_unit_converter("emissions_rate", unit_mode) + # Get converter for emission rate values + ng_emission_rate_converter = get_converter("gas_emission_factor", unit_mode) + elec_emission_rate_converter = get_converter("emissions_rate", unit_mode) for field, label in available_rows: is_diff_row = field in diff_fields @@ -1335,13 +1342,19 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un for idx, scen_id in enumerate(scen_ids): raw_value = emission_df.iloc[idx].get(field, "") - # Apply unit conversion for NG emission rate + # Apply unit conversion for emission rates if field == "ng_emission_rate_gCO2e_per_kWh" and raw_value is not None: try: converted = ng_emission_rate_converter(float(raw_value)) display_value = f"{converted:.2f}" except (ValueError, TypeError): display_value = format_table_value(raw_value, field_name=field) + elif field == "elec_avg_emission_rate_gCO2e_per_kWh" and raw_value is not None: + try: + converted = elec_emission_rate_converter(float(raw_value)) + display_value = f"{converted:.2f}" + except (ValueError, TypeError): + display_value = format_table_value(raw_value, field_name=field) else: display_value = format_table_value(raw_value, field_name=field) @@ -1910,6 +1923,36 @@ def _options(values): ], grow=True, ), + dmc.SimpleGrid( + cols=2, + spacing="md", + children=[ + dmc.Select( + id="edit-em-elec-source", + label="Grid emissions source", + placeholder="Select grid emissions source", + data=_options(emissions_index["elec_emission_source"]), + searchable=True, + clearable=False, + ), + dmc.Stack( + [ + dmc.Text( + id="edit-em-elec-emission-rate-label", + children="Constant grid emissions rate (g/kWh)", + size="sm", + fw=500, + ), + dmc.NumberInput( + id="edit-em-elec-avg-emission-rate", + min=0, + step=1, + ), + ], + gap=4, + ), + ], + ), dmc.SimpleGrid( cols=2, spacing="md", @@ -1936,12 +1979,6 @@ def _options(values): cols=2, spacing="md", children=[ - dmc.TextInput( - id="edit-em-time-zone", - label="Time zone", - placeholder="e.g. America/Los_Angeles", - disabled=True, - ), dmc.Select( id="edit-em-emission-type", label="Emission type", @@ -1950,19 +1987,6 @@ def _options(values): searchable=False, clearable=False, ), - ], - ), - dmc.SimpleGrid( - cols=2, - spacing="md", - children=[ - dmc.NumberInput( - id="edit-em-shortrun-weighting", - label="Short-run weighting", - min=0, - max=1, - step=0.1, - ), dmc.Select( id="edit-em-year", label="Year", diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 33c94b3..d9e9e67 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -100,6 +100,10 @@ def layout(): "label": "Combustion vs pre-combustion", "value": "emission_types", }, + { + "label": "Different electricity emission factors", + "value": "emission_sources", + }, ], value=None, placeholder="Select a scenario group", @@ -235,6 +239,7 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store - year: Varies years (2025, 2035, 2045), others reset to defaults - refrigerant_leakage: Varies leakage (0.01, 0.05, 0.1), others reset to defaults - emission_types: Varies emission type ("Includes pre-combustion" vs "Combustion only"), others reset to defaults + - emission_sources: Varies emission source (average and marginal) and associated values, others reset to defaults """ # When dropdown is cleared, clear the stored group to allow re-selecting if not group_id: @@ -257,8 +262,12 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store default_ids = ["em_scenario_a", "em_scenario_b"] if group_id != "emission_types": # only two scenarios for comparing emission types default_ids.append("em_scenario_c") + if group_id == "emission_sources": # fourth scenario for comparing emission sources + default_ids.append("em_scenario_d") # Get defaults + default_elec_emission_source = EmissionScenarioDefaults.ELEC_EMISSION_SOURCE.value + default_elec_avg_emission_rate = EmissionScenarioDefaults.ELEC_AVG_EMISSION_RATE_G_KWH.value default_year = EmissionScenarioDefaults.YEAR.value default_leakage = EmissionScenarioDefaults.REFRIGERANT_LEAKAGE.value default_emission_type = EmissionScenarioDefaults.EMISSION_TYPE.value @@ -272,24 +281,37 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store EmissionScenarioDefaults.NG_EMISSION_RATE_G_KWH_COMBUSTION.value, default_ng_emission_rate, ] + elec_emission_source_values = [ + "Average (Cambium)", + "Constant (User-provided)", + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + ] + elec_avg_emission_rate_values = [None, 0, None, None] + emission_sources_names = [ + "Cambium Average Emissions", + "Constant (Zero) Emissions", + "Long-run Marginal Emissions", + "Short-run Marginal Emissions", + ] # Create base scenario template from first existing scenario or defaults base_scenario = ( existing_scenarios[0].copy() if existing_scenarios else { + "elec_emission_source": default_elec_emission_source, + "elec_avg_emission_rate_gCO2e_per_kWh": default_elec_avg_emission_rate, "grid_scenario": "MidCase", "gea_grid_region": None, - "time_zone": "America/Los_Angeles", "emission_type": default_emission_type, - "shortrun_weighting": 0, "annual_refrig_leakage_percent": default_leakage, "ng_emission_rate_gCO2e_per_kWh": default_ng_emission_rate, "year": default_year, } ) - # Reset to default 2/3 scenarios (a, b, optionally c) with group-specific values + # Reset to default 2/3/4 scenarios (a, b, optionally c & d) with group-specific values updated_scenarios = [] for idx, scen_id in enumerate(default_ids): scen = {**base_scenario, "em_scen_id": scen_id, "em_scen_name": ""} @@ -297,27 +319,53 @@ def handle_emission_group_selection(group_id, metadata_data, selected_ids, store if group_id == "year": # Vary year, reset others to defaults scen["year"] = year_values[idx % len(year_values)] + scen["em_scen_name"] = str(scen["year"]) + scen["annual_refrig_leakage_percent"] = default_leakage scen["emission_type"] = default_emission_type scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate - scen["em_scen_name"] = str(scen["year"]) + scen["elec_emission_source"] = default_elec_emission_source + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate elif group_id == "refrigerant_leakage": # Vary leakage, reset others to defaults scen["annual_refrig_leakage_percent"] = leakage_values[idx % len(leakage_values)] + pct_leakage = scen["annual_refrig_leakage_percent"] * 100 + scen["em_scen_name"] = f"{pct_leakage:.0f}% leakage" + scen["year"] = default_year scen["emission_type"] = default_emission_type scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate - pct_leakage = scen["annual_refrig_leakage_percent"] * 100 - scen["em_scen_name"] = f"{pct_leakage:.0f}% leakage" + scen["elec_emission_source"] = default_elec_emission_source + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate elif group_id == "emission_types": # Set emission type, reset others to defaults scen["emission_type"] = emission_types[idx % len(emission_types)] scen["ng_emission_rate_gCO2e_per_kWh"] = ng_emission_rate_values[ idx % len(ng_emission_rate_values) ] + scen["em_scen_name"] = scen["emission_type"] + + scen["year"] = default_year + scen["annual_refrig_leakage_percent"] = default_leakage + scen["elec_emission_source"] = default_elec_emission_source + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = default_elec_avg_emission_rate + elif group_id == "emission_sources": + # Vary source, avg emissions rate, and short-run weighting, reset others to defaults + scen["elec_emission_source"] = elec_emission_source_values[ + idx % len(elec_emission_source_values) + ] + scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate_values[ + idx % len(elec_avg_emission_rate_values) + ] + scen["em_scen_name"] = emission_sources_names[idx % len(emission_sources_names)] + if scen["elec_emission_source"] == "Constant (User-provided)": + scen["grid_scenario"] = None + scen["gea_grid_region"] = None + scen["year"] = default_year scen["annual_refrig_leakage_percent"] = default_leakage - scen["em_scen_name"] = scen["emission_type"] + scen["emission_type"] = default_emission_type + scen["ng_emission_rate_gCO2e_per_kWh"] = default_ng_emission_rate updated_scenarios.append(scen) @@ -555,11 +603,11 @@ def remove_emission_scenario(remove_clicks, metadata_data, selected_em_ids): Output("emissions-edit-modal", "opened"), Output("edit-em-scenario-id-input", "value"), Output("edit-em-scenario-name-input", "value"), + Output("edit-em-elec-source", "value"), + Output("edit-em-elec-avg-emission-rate", "value"), Output("edit-em-grid-scenario", "value"), Output("edit-em-gea-grid-region", "value"), - Output("edit-em-time-zone", "value"), Output("edit-em-emission-type", "value"), - Output("edit-em-shortrun-weighting", "value"), Output("edit-em-year", "value"), Output("edit-em-refrig-leakage", "value"), Output("edit-em-ng-emission-rate", "value"), @@ -579,13 +627,13 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", + None, "", "", "", None, None, None, - None, "No emission data.", ) @@ -606,13 +654,13 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", + None, "", "", "", None, None, None, - None, "Failed to parse button id.", ) @@ -625,44 +673,53 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): "", "", "", + None, "", "", "", None, None, None, - None, f"Scenario {em_scen_id!r} not found.", ) - # Convert NG emissions rate for display based on unit mode + # Convert emissions rates for display based on unit mode + from utils.units import get_converter + ng_emission_rate_base = scen.get("ng_emission_rate_gCO2e_per_kWh") if ng_emission_rate_base is not None and unit_mode == "IP": - from utils.units import get_unit_converter - - ng_converter = get_unit_converter("emissions_rate", "IP") + ng_converter = get_converter("gas_emission_factor", "IP") ng_emission_rate_display = ng_converter(float(ng_emission_rate_base)) else: ng_emission_rate_display = ng_emission_rate_base + elec_avg_emission_rate_base = scen.get("elec_avg_emission_rate_gCO2e_per_kWh") + if elec_avg_emission_rate_base is not None and unit_mode == "IP": + elec_converter = get_converter("emissions_rate", "IP") + elec_avg_emission_rate_display = elec_converter(float(elec_avg_emission_rate_base)) + else: + elec_avg_emission_rate_display = elec_avg_emission_rate_base + # Round refrigerant leakage to 2 decimal places for display refrig_leakage = scen.get("annual_refrig_leakage_percent") if refrig_leakage is not None: refrig_leakage = round(float(refrig_leakage), 2) - # Round NG emission rate display to 2 decimal places + # Round emission rate display to 2 decimal places if ng_emission_rate_display is not None: ng_emission_rate_display = round(float(ng_emission_rate_display), 2) + if elec_avg_emission_rate_display is not None: + elec_avg_emission_rate_display = round(float(elec_avg_emission_rate_display), 2) return ( True, scen.get("em_scen_id"), scen.get("em_scen_name", ""), + scen.get("elec_emission_source", ""), + elec_avg_emission_rate_display, scen.get("grid_scenario", ""), scen.get("gea_grid_region", ""), - scen.get("time_zone", ""), scen.get("emission_type", ""), - scen.get("shortrun_weighting"), str(scen.get("year")) if scen.get("year") is not None else "", refrig_leakage, ng_emission_rate_display, @@ -677,11 +734,11 @@ def open_edit_emission_modal(edit_clicks, metadata_data, unit_mode): Input("edit-em-scenario-save-btn", "n_clicks"), State("edit-em-scenario-id-input", "value"), State("edit-em-scenario-name-input", "value"), + State("edit-em-elec-source", "value"), + State("edit-em-elec-avg-emission-rate", "value"), State("edit-em-grid-scenario", "value"), State("edit-em-gea-grid-region", "value"), - State("edit-em-time-zone", "value"), State("edit-em-emission-type", "value"), - State("edit-em-shortrun-weighting", "value"), State("edit-em-year", "value"), State("edit-em-refrig-leakage", "value"), State("edit-em-ng-emission-rate", "value"), @@ -693,11 +750,11 @@ def save_edit_emission( n_clicks, scen_id, scen_name, + elec_emission_source, + elec_avg_emission_rate, grid_scenario, gea_grid_region, - time_zone, emission_type, - shortrun_weighting, year, refrig_leakage, ng_emission_rate, @@ -714,11 +771,6 @@ def save_edit_emission( return True, no_update, "Scenario ID is missing." # basic type cleaning - try: - shortrun_weighting = float(shortrun_weighting) if shortrun_weighting is not None else 0.0 - except (TypeError, ValueError): - shortrun_weighting = 0.0 - try: year = int(year) if year is not None and year != "" else 2025 except (TypeError, ValueError): @@ -734,6 +786,14 @@ def save_edit_emission( except (TypeError, ValueError): ng_emission_rate = 0.0 + try: + elec_avg_emission_rate = ( + float(elec_avg_emission_rate) if elec_avg_emission_rate is not None else None + ) + except (TypeError, ValueError): + elec_avg_emission_rate = None + # default avg emission rate is None to generate an error if calculation is run without a valid input + # Convert NG emissions rate back to base units (g/kWh) if in IP mode unit_mode = unit_mode or "SI" if unit_mode == "IP" and ng_emission_rate > 0: @@ -743,6 +803,13 @@ def save_edit_emission( # g/kWh = (lb/kBTU) / (g_to_lb / Wh_to_BTU) ng_emission_rate = ng_emission_rate / (g_to_lb / Wh_to_BTU) + if unit_mode == "IP" and elec_avg_emission_rate is not None: + from utils.units import g_to_lb + + # IP unit is lb/kWh, convert back to g/kWh + # g/kWh = (lb/kWh) / (g_to_lb) + elec_avg_emission_rate = elec_avg_emission_rate / (g_to_lb) + scenarios = metadata_data.get("emission_settings", []) updated = False new_scenarios = [] @@ -751,11 +818,11 @@ def save_edit_emission( if scen.get("em_scen_id") == scen_id: new_scen = scen.copy() new_scen["em_scen_name"] = scen_name or scen.get("em_scen_name", "") + new_scen["elec_emission_source"] = elec_emission_source + new_scen["elec_avg_emission_rate_gCO2e_per_kWh"] = elec_avg_emission_rate new_scen["grid_scenario"] = grid_scenario new_scen["gea_grid_region"] = gea_grid_region - new_scen["time_zone"] = time_zone new_scen["emission_type"] = emission_type - new_scen["shortrun_weighting"] = shortrun_weighting new_scen["year"] = year new_scen["annual_refrig_leakage_percent"] = refrig_leakage new_scen["ng_emission_rate_gCO2e_per_kWh"] = ng_emission_rate @@ -786,15 +853,18 @@ def cancel_edit_emission_modal(n_clicks): @callback( Output("edit-em-ng-emission-rate-label", "children"), + Output("edit-em-elec-emission-rate-label", "children"), Input("unit-toggle", "value"), ) -def update_ng_emissions_rate_label(unit_mode): - """Update NG emissions rate label based on unit mode.""" - from utils.units import get_unit_label +def update_emissions_rate_label(unit_mode): + """Update NG/elec emissions rate label based on unit mode.""" + from utils.units import get_display_unit unit_mode = unit_mode or "SI" - ng_unit = get_unit_label("emissions_rate", unit_mode) - return f"Gas emissions rate ({ng_unit})" + ng_unit = get_display_unit("gas_emission_factor", unit_mode) + elec_unit = get_display_unit("emissions_rate", unit_mode) + + return f"Gas emissions rate ({ng_unit})", f"Constant grid emissions rate ({elec_unit})" @callback( @@ -936,3 +1006,26 @@ def update_ng_rate_on_emission_type_change(emission_type, unit_mode): ) return ng_emission_rate + + +@callback( + Output("edit-em-elec-avg-emission-rate", "disabled"), + Output("edit-em-grid-scenario", "value", allow_duplicate=True), + Output("edit-em-gea-grid-region", "value", allow_duplicate=True), + Input("edit-em-elec-source", "value"), + State("edit-em-grid-scenario", "value"), + State("edit-em-gea-grid-region", "value"), + prevent_initial_call=True, +) +def update_emission_inputs_on_source_change(emission_source, grid_scenario, grid_region): + """Update emissions inputs when emission source changes to fixed user-provided value.""" + + # disable average emissions rate input + disable_avg = emission_source != "Constant (User-provided)" + + # blank out cambium-related inputs + if not disable_avg: + grid_scenario = None + grid_region = None + + return disable_avg, grid_scenario, grid_region diff --git a/src/config.py b/src/config.py index 4c3338b..f79c319 100644 --- a/src/config.py +++ b/src/config.py @@ -44,12 +44,22 @@ class EquipmentTableRows(Enum): class EmissionTableRows(Enum): """Row configurations for emission table view modes.""" - SIMPLE = ("grid_scenario", "gea_grid_region", "emission_type", "year") + SIMPLE = ( + "em_scen_name", + "elec_emission_source", + "elec_avg_emission_rate_gCO2e_per_kWh", + "grid_scenario", + "gea_grid_region", + "emission_type", + "year", + ) ADVANCED = ( + "em_scen_name", + "elec_emission_source", + "elec_avg_emission_rate_gCO2e_per_kWh", "grid_scenario", "gea_grid_region", "emission_type", - "shortrun_weighting", "annual_refrig_leakage_percent", "ng_emission_rate_gCO2e_per_kWh", "year", @@ -59,6 +69,8 @@ class EmissionTableRows(Enum): class EmissionScenarioDefaults(Enum): """Default values for emission scenario parameters.""" + ELEC_EMISSION_SOURCE: str = "Marginal (Cambium, Long-run)" + ELEC_AVG_EMISSION_RATE_G_KWH: float = None YEAR: int = 2025 REFRIGERANT_LEAKAGE: float = 0.02 EMISSION_TYPE: str = "Includes pre-combustion" @@ -158,6 +170,9 @@ class Columns(StrEnum): SRMER_CO2E_C = "srmer_co2e_c" SRMER_CO2E_P = "srmer_co2e_p" SRMER_CO2E = "srmer_co2e" + AER_LOAD_CO2E_C = "aer_load_co2e_c" + AER_LOAD_CO2E_P = "aer_load_co2e_p" + AER_LOAD_CO2E = "aer_load_co2e" SHORTRUN_WEIGHTING = "shortrun_weighting" ELEC_EMISSIONS_RATE_G_PER_KWH = "elec_emissions_rate_gCO2e_per_kWh" diff --git a/src/emissions.py b/src/emissions.py index 2c39029..dd286e8 100644 --- a/src/emissions.py +++ b/src/emissions.py @@ -10,11 +10,11 @@ class EmissionScenario(DotAccessMixin, BaseModel): em_scen_id: str em_scen_name: str - grid_scenario: str + elec_emission_source: str + elec_avg_emission_rate_gCO2e_per_kWh: float | None = None + grid_scenario: str | None = None gea_grid_region: str | None = None - time_zone: str emission_type: str - shortrun_weighting: float annual_refrig_leakage_percent: float ng_emission_rate_gCO2e_per_kWh: float year: int @@ -24,7 +24,7 @@ class StandardEmissions: """ Unified interface for emissions data. Canonical schema: - emission_scenario | gea_grid_region | time_zone | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p + emission_scenario | gea_grid_region | year | timestamp | lrmer_co2e_c | lrmer_co2e_p | srmer_co2e_c | srmer_co2e_p | aer_load_co2e_c | aer_load_co2e_p """ def __init__(self, df: pd.DataFrame): @@ -36,12 +36,13 @@ def _validate(df: pd.DataFrame) -> pd.DataFrame: "emission_scenario", "gea_grid_region", "year", - "time_zone", "timestamp", "lrmer_co2e_c", "lrmer_co2e_p", "srmer_co2e_c", "srmer_co2e_p", + "aer_load_co2e_c", + "aer_load_co2e_p", ] missing = [c for c in required if c not in df.columns] if missing: @@ -54,7 +55,14 @@ def _validate(df: pd.DataFrame) -> pd.DataFrame: df = df.sort_values("timestamp").set_index("timestamp") # enforce numeric - for col in ["lrmer_co2e_c", "lrmer_co2e_p", "srmer_co2e_c", "srmer_co2e_p"]: + for col in [ + "lrmer_co2e_c", + "lrmer_co2e_p", + "srmer_co2e_c", + "srmer_co2e_p", + "aer_load_co2e_c", + "aer_load_co2e_p", + ]: df[col] = pd.to_numeric(df[col], errors="coerce") if df[col].isnull().any(): raise ValueError(f"Invalid numeric values in column {col}") @@ -107,7 +115,6 @@ def get_emissions_data( "em_scen_id": scenario.em_scen_id, "emission_scenario": scenario.grid_scenario, "gea_grid_region": scenario.gea_grid_region, - "time_zone": scenario.time_zone, "emission_type": scenario.emission_type, "year": df["year"], "timestamp": df["timestamp"], @@ -117,6 +124,9 @@ def get_emissions_data( "srmer_co2e_c": df["srmer_co2e_c"], "srmer_co2e_p": df["srmer_co2e_p"], "srmer_co2e": df["srmer_co2e"], + "aer_load_co2e_c": df["aer_load_co2e_c"], + "aer_load_co2e_p": df["aer_load_co2e_p"], + "aer_load_co2e": df["aer_load_co2e"], } ) diff --git a/src/energy.py b/src/energy.py index e41c0d0..cd85c28 100644 --- a/src/energy.py +++ b/src/energy.py @@ -1149,12 +1149,7 @@ def site_to_source( f"Processing emission scenario: {em_scen_id}, year={metadata[em_scen_id].year}" ) - emissions_data = get_emissions_data(metadata[em_scen_id]) - logger.debug(f"Loaded {len(emissions_data.df)} emission data rows") - em_scen = metadata[em_scen_id] - - shortrun_weighting = float(em_scen.shortrun_weighting) annual_refrig_leakage_percent = float(em_scen.annual_refrig_leakage_percent) gas_emissions_rate = float(em_scen.ng_emission_rate_gCO2e_per_kWh) @@ -1166,62 +1161,117 @@ def site_to_source( base[Col.HOUR.value] = base.index.hour base[Col.DOY.value] = base.index.dayofyear - # collapse emissions to month-hour averages - emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month - emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour - emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting - group_cols = [Col.MONTH.value, Col.HOUR.value] - - # all rates are in gCO2e/kWh - if em_scen.emission_type == "Combustion only": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) - ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) - elif em_scen.emission_type == "Includes pre-combustion": - emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( - ( - emissions_data.df[Col.LRMER_CO2E_C.value] - + emissions_data.df[Col.LRMER_CO2E_P.value] + if em_scen.elec_emission_source in [ + "Marginal (Cambium, Long-run)", + "Marginal (Cambium, Short-run)", + "Average (Cambium)", + ]: + emissions_data = get_emissions_data(metadata[em_scen_id]) + logger.debug( + f"Cambium grid emissions: Loaded {len(emissions_data.df)} emission data rows" + ) + + # collapse emissions to month-hour averages + emissions_data.df[Col.MONTH.value] = emissions_data.df.index.month + emissions_data.df[Col.HOUR.value] = emissions_data.df.index.hour + group_cols = [Col.MONTH.value, Col.HOUR.value] + + if em_scen.elec_emission_source == "Average (Cambium)": + # all rates are in gCO2e/kWh + if em_scen.emission_type == "Combustion only": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = emissions_data.df[ + Col.AER_LOAD_CO2E_C.value + ] + elif em_scen.emission_type == "Includes pre-combustion": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + emissions_data.df[Col.AER_LOAD_CO2E_C.value] + + emissions_data.df[Col.AER_LOAD_CO2E_P.value] + ) + else: + raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") + + df_em = ( + emissions_data.df.groupby(group_cols)[ + [ + Col.ELEC_EMISSIONS_RATE_G_PER_KWH, + Col.AER_LOAD_CO2E_C.value, + Col.AER_LOAD_CO2E_P.value, + Col.AER_LOAD_CO2E.value, + ] + ] + .mean() + .reset_index() ) - * (1 - shortrun_weighting) - ) + ( - ( - emissions_data.df[Col.SRMER_CO2E_C.value] - + emissions_data.df[Col.SRMER_CO2E_P.value] + else: + if em_scen.elec_emission_source == "Marginal (Cambium, Long-run)": + shortrun_weighting = 0 + elif em_scen.elec_emission_source == "Marginal (Cambium, Short-run)": + shortrun_weighting = 1 + emissions_data.df[Col.SHORTRUN_WEIGHTING.value] = shortrun_weighting + + # all rates are in gCO2e/kWh + if em_scen.emission_type == "Combustion only": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + emissions_data.df[Col.LRMER_CO2E_C.value] * (1 - shortrun_weighting) + ) + (emissions_data.df[Col.SRMER_CO2E_C.value] * shortrun_weighting) + elif em_scen.emission_type == "Includes pre-combustion": + emissions_data.df[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = ( + ( + emissions_data.df[Col.LRMER_CO2E_C.value] + + emissions_data.df[Col.LRMER_CO2E_P.value] + ) + * (1 - shortrun_weighting) + ) + ( + ( + emissions_data.df[Col.SRMER_CO2E_C.value] + + emissions_data.df[Col.SRMER_CO2E_P.value] + ) + * shortrun_weighting + ) + else: + raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") + + df_em = ( + emissions_data.df.groupby(group_cols)[ + [ + Col.ELEC_EMISSIONS_RATE_G_PER_KWH, + Col.LRMER_CO2E_C.value, + Col.LRMER_CO2E_P.value, + Col.LRMER_CO2E.value, + Col.SRMER_CO2E_C.value, + Col.SRMER_CO2E_P.value, + Col.SRMER_CO2E.value, + Col.SHORTRUN_WEIGHTING.value, + ] + ] + .mean() + .reset_index() ) - * shortrun_weighting - ) - else: - raise ValueError(f"Invalid emissions_type: {em_scen.emission_type}") - - df_em = ( - emissions_data.df.groupby(group_cols)[ - [ - Col.ELEC_EMISSIONS_RATE_G_PER_KWH, - Col.LRMER_CO2E_C.value, - Col.LRMER_CO2E_P.value, - Col.LRMER_CO2E.value, - Col.SRMER_CO2E_C.value, - Col.SRMER_CO2E_P.value, - Col.SRMER_CO2E.value, - Col.SHORTRUN_WEIGHTING.value, - ] - ] - .mean() - .reset_index() - ) - # expand loads with this year's emissions - merged = base.merge(df_em, on=[Col.MONTH.value, Col.HOUR.value], how="left") + # expand loads with this year's emissions + merged = base.merge(df_em, on=[Col.MONTH.value, Col.HOUR.value], how="left") - nan_count = merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH].isna().sum() - if nan_count > 0: - logger.warning(f"Merge produced {nan_count} rows with missing emission rates") + nan_count = merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH].isna().sum() + if nan_count > 0: + logger.warning(f"Merge produced {nan_count} rows with missing emission rates") - # Note: Keep original load data year (already extracted above) for timestamp - # reconstruction. This avoids Feb 29 errors when leap year load data is - # used with non-leap emission scenario years. Emissions are still correct - # because they're matched by month+hour pattern. + # Note: Keep original load data year (already extracted above) for timestamp + # reconstruction. This avoids Feb 29 errors when leap year load data is + # used with non-leap emission scenario years. Emissions are still correct + # because they're matched by month+hour pattern. + + elif em_scen.elec_emission_source == "Constant (User-provided)": + elec_avg_emission_rate = em_scen.elec_avg_emission_rate_gCO2e_per_kWh + if elec_avg_emission_rate is not None and elec_avg_emission_rate >= 0: + logger.debug(f"Constant grid emissions rate: {elec_avg_emission_rate} gCO2e/kWh") + + merged = base.copy() + merged[Col.ELEC_EMISSIONS_RATE_G_PER_KWH] = float(elec_avg_emission_rate) + else: + raise ValueError("Provide a valid input value for constant grid emissions rate.") + + else: + raise ValueError(f"Invalid elec_emissions_source: {em_scen.elec_emission_source}") ## fuel switching logic emissions_intensity_HP = ( diff --git a/src/metadata.py b/src/metadata.py index 76740e9..f4ca6e4 100644 --- a/src/metadata.py +++ b/src/metadata.py @@ -97,11 +97,11 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_a", em_scen_name="2025", + elec_emission_source="Marginal (Cambium, Long-run)", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2025, @@ -109,11 +109,11 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_b", em_scen_name="2035", + elec_emission_source="Marginal (Cambium, Long-run)", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2035, @@ -121,11 +121,11 @@ def create(cls, **overrides: Any) -> "Metadata": EmissionScenario( em_scen_id="em_scenario_c", em_scen_name="2045", + elec_emission_source="Marginal (Cambium, Long-run)", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region=None, - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2045, diff --git a/tests/conftest.py b/tests/conftest.py index 80ec79b..953b9c2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -54,11 +54,11 @@ def emission_scenario(): """Create a sample emission scenario for testing.""" return EmissionScenario( em_scen_id="test_em_1", + elec_emission_source="Marginal (Cambium, Long-run)", + elec_avg_emission_rate_gCO2e_per_kWh=None, grid_scenario="MidCase", gea_grid_region="CAMX", - time_zone="America/Los_Angeles", emission_type="Includes pre-combustion", - shortrun_weighting=0.0, annual_refrig_leakage_percent=0.05, ng_emission_rate_gCO2e_per_kWh=239.2, year=2025, diff --git a/utils/units.py b/utils/units.py index 707945f..7ad45be 100644 --- a/utils/units.py +++ b/utils/units.py @@ -185,7 +185,7 @@ def sqft_to_sqm(sqft): "emissions_rate": { "base": "g CO₂e/kWh", "SI": {"unit": "g CO₂e/kWh", "func": lambda x: x}, - "IP": {"unit": "lb CO₂e/kBTU", "func": lambda x: x * g_to_lb / Wh_to_BTU}, + "IP": {"unit": "lb CO₂e/kWh", "func": lambda x: x * g_to_lb}, }, # --- Gas emission factor --- "gas_emission_factor": { @@ -298,6 +298,8 @@ def sqft_to_sqm(sqft): "lrmer_co2e_p": ("emissions_rate", "LRMER Pre-combustion"), "srmer_co2e_c": ("emissions_rate", "SRMER Combustion"), "srmer_co2e_p": ("emissions_rate", "SRMER Pre-combustion"), + "aer_load_co2e_c": ("emissions_rate", "AER Load Combustion"), + "aer_load_co2e_p": ("emissions_rate", "AER Load Pre-combustion"), "ng_emission_rate_gCO2e_per_kWh": ("gas_emission_factor", "Gas Emissions Rate"), # === Refrigerant Mass (kg) === "hr_wwhp_refrigerant_weight_kg": ("mass", "HR-WWHP Refrig Weight"), @@ -327,6 +329,7 @@ def sqft_to_sqm(sqft): # === Emission Scenario Parameters === "lrmer_co2e": (None, "LRMER CO₂e"), "srmer_co2e": (None, "SRMER CO₂e"), + "aer_load_co2e": (None, "AER Load CO₂e"), "shortrun_weighting": (None, "Short-run Weighting"), "year": (None, "Year"), # === Scenario Identifiers === From c2cc61bd908af2a1d425801899c7f16c7ec2eb9d Mon Sep 17 00:00:00 2001 From: t-kramer Date: Mon, 14 Sep 2026 13:55:28 -0700 Subject: [PATCH 38/48] fix: first pass --- layout/shell.py | 13 +++++++++++++ pages/results_page.py | 24 +++++++++++++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/layout/shell.py b/layout/shell.py index b858bb0..c34aaae 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -78,6 +78,7 @@ def build_shell(page_content): dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), dcc.Store(id="results-ready-store", storage_type="session", data=False), dcc.Store(id="results-calculating-store", storage_type="memory", data=False), + dcc.Store(id="settings-dirty-store", storage_type="session", data=True), dcc.Location(id="nav-location", refresh=True), dcc.Download(id="download-data"), ] @@ -368,3 +369,15 @@ def update_equipment_number_map(selected_ids): def toggle_download_button(results_ready): has_results = bool(results_ready) return not has_results, has_results + + +@callback( + Output("settings-dirty-store", "data", allow_duplicate=True), + Input("metadata-store", "data"), + Input("equipment-store", "data"), + Input("selected-equipment-store", "data"), + Input("selected-emissions-store", "data"), + prevent_initial_call=True, +) +def mark_settings_dirty(*_): + return True diff --git a/pages/results_page.py b/pages/results_page.py index 7e337e5..d306b7f 100644 --- a/pages/results_page.py +++ b/pages/results_page.py @@ -632,12 +632,14 @@ def pick_value(prev_val): Output("results-ready-store", "data", allow_duplicate=True), Output("results-calculating-store", "data", allow_duplicate=True), Output("notification-container", "sendNotifications", allow_duplicate=True), + Output("settings-dirty-store", "data", allow_duplicate=True), Input("url", "pathname"), State("metadata-store", "data"), State("equipment-store", "data"), State("selected-equipment-store", "data"), State("selected-emissions-store", "data"), State("session-store", "data"), + State("settings-dirty-store", "data"), prevent_initial_call=True, ) def auto_calculate_on_results( @@ -647,28 +649,32 @@ def auto_calculate_on_results( selected_scenarios, selected_emission_ids, session_data, + settings_dirty, ): """Auto-trigger full site→source calculation when the user navigates to the Results tab.""" if pathname != URLS.RESULTS.value: raise dash.exceptions.PreventUpdate + if not settings_dirty: + return no_update, time.time(), no_update, no_update + if not metadata_json: - return no_update, False, no_update + return no_update, time.time(), no_update, no_update metadata = Metadata(**metadata_json) if not metadata.load_data.load_type: - return no_update, False, no_update + return no_update, time.time(), no_update, no_update if not metadata.base_gea_grid_region: notification = create_warning_notification( "Missing Grid Region", "Could not determine grid region. Please select a location on the Loads page.", ) - return no_update, False, [notification] + return no_update, time.time(), [notification], no_update if not equipment_json or not selected_scenarios or not session_data: - return no_update, False, no_update + return no_update, time.time(), no_update, no_update try: folder = Path(f"/tmp/{session_data['session_id']}") @@ -702,7 +708,7 @@ def auto_calculate_on_results( "Calculation Complete", "Source emissions calculation finished successfully.", ) - return time.time(), False, [success] + return time.time(), time.time(), [success], False except Exception as e: logger.exception(f"Auto-calculation error on Results navigation: {e}") @@ -710,7 +716,7 @@ def auto_calculate_on_results( "Calculation Error", "Automatic calculation failed. Please check your load and settings.", ) - return no_update, False, [notification] + return no_update, time.time(), [notification], no_update @callback( @@ -718,6 +724,6 @@ def auto_calculate_on_results( Input("results-calculating-store", "data"), prevent_initial_call=True, ) -def control_loading_overlay(is_calculating): - """Hide the loading overlay once calculation completes.""" - return bool(is_calculating) +def control_loading_overlay(_store_data): + """Hide the loading overlay whenever the calculation store is updated.""" + return False From ddc08582409ef62f41e62e89806f96dc32543cec Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 15 Sep 2026 08:50:57 -0700 Subject: [PATCH 39/48] fix: clean up results loading behavior --- layout/charts.py | 4 +- layout/shell.py | 2 +- pages/emissions_page.py | 84 +--------------------------------------- pages/results_page.py | 86 ++++++++++++++++++++++++++++++++--------- src/visuals.py | 21 ++++++++++ 5 files changed, 94 insertions(+), 103 deletions(-) diff --git a/layout/charts.py b/layout/charts.py index 523ce35..d4c11de 100644 --- a/layout/charts.py +++ b/layout/charts.py @@ -20,7 +20,9 @@ def _chart_block(controls, graph_id, height=600): controls, dmc.Paper( dcc.Loading( - type="default", + type="circle", + delay_show=300, + delay_hide=100, children=dcc.Graph( id=graph_id, style={"height": f"{height}px", "width": "100%"}, diff --git a/layout/shell.py b/layout/shell.py index c34aaae..fe45ac6 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -77,7 +77,7 @@ def build_shell(page_content): dcc.Store(id="equipment-scenario-group-store", storage_type="session", data="default"), dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), dcc.Store(id="results-ready-store", storage_type="session", data=False), - dcc.Store(id="results-calculating-store", storage_type="memory", data=False), + dcc.Store(id="results-refresh-store", storage_type="memory", data=None), dcc.Store(id="settings-dirty-store", storage_type="session", data=True), dcc.Location(id="nav-location", refresh=True), dcc.Download(id="download-data"), diff --git a/pages/emissions_page.py b/pages/emissions_page.py index d9e9e67..4ff07ef 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -1,9 +1,7 @@ import json -from pathlib import Path import dash import dash_mantine_components as dmc -import pandas as pd from dash import ( ALL, Input, @@ -19,11 +17,9 @@ from layout.input import add_emission_modal, build_emissions_table, edit_emission_modal from src.config import URLS, EmissionScenarioDefaults -from src.energy import site_to_source from src.metadata import Metadata from utils.error_handling import ( create_error_notification, - create_success_notification, create_warning_notification, ) from utils.logging_config import get_logger @@ -39,9 +35,6 @@ def layout(): return dmc.Container( [ dcc.Store(id="active-emissions-tab"), - dcc.Store(id="site-energy-store"), - html.Div(id="source-energy-store"), - html.Div(id="calc-status-toast"), dmc.Group( [ dmc.Stack( @@ -151,9 +144,9 @@ def layout(): [ dmc.Button( [ - "Calculate Source Emissions", + "View Results", DashIconify( - icon="ic:baseline-autorenew", + icon="ic:baseline-arrow-forward", width=20, style={"marginLeft": 8}, ), @@ -910,79 +903,6 @@ def navigate_to_results(n_clicks, metadata_json, equipment_json, selected_scenar return URLS.RESULTS.value, no_update -@callback( - Output("source-energy-store", "children"), - Output("notification-container", "sendNotifications", allow_duplicate=True), - Output("results-ready-store", "data"), - Output("nav-location", "pathname", allow_duplicate=True), - Input("site-energy-store", "data"), - State("metadata-store", "data"), - State("selected-emissions-store", "data"), - State("session-store", "data"), - prevent_initial_call=True, -) -def run_site_to_source(site_energy_path, metadata_json, selected_emission_ids, session_data): - if not site_energy_path: - raise dash.exceptions.PreventUpdate - - if not selected_emission_ids: - notification = create_warning_notification( - "No Emission Scenarios", "Please select at least one emission scenario." - ) - return no_update, [notification], no_update, no_update - - try: - logger.info( - f"Converting from site energy to source emissions for following em_scenarios: {selected_emission_ids}" - ) - - folder = Path(f"/tmp/{session_data['session_id']}") - folder.mkdir(parents=True, exist_ok=True) - - site_energy = pd.read_pickle(site_energy_path) - metadata = Metadata(**metadata_json) - - # filter emission scenarios - selected_emission_ids = selected_emission_ids or [] - if selected_emission_ids: - metadata.emission_settings = [ - scen - for scen in metadata.emission_settings - if scen.em_scen_id in selected_emission_ids - ] - - source_energy = site_to_source(site_energy, metadata=metadata) - - source_path = folder / "source_energy.pkl" - source_energy.to_pickle(source_path) - - logger.info(f"Saved source energy to: {source_path}") - - success = create_success_notification( - "Calculation Complete", - "Source emissions calculation finished successfully.", - ) - - return ( - dcc.Store(id="source-energy-store", data=str(source_path)), - [success], - True, - URLS.RESULTS.value, - ) - - except ValueError as e: - logger.error(f"Emissions calculation error: {e}") - notification = create_error_notification("Calculation Error", str(e)) - return no_update, [notification], no_update, no_update - - except Exception as e: - logger.exception(f"Unexpected emissions error: {e}") - notification = create_error_notification( - "Unexpected Error", "Emissions calculation failed." - ) - return no_update, [notification], no_update, no_update - - @callback( Output("edit-em-ng-emission-rate", "value", allow_duplicate=True), Input("edit-em-emission-type", "value"), diff --git a/pages/results_page.py b/pages/results_page.py index d306b7f..fe7d275 100644 --- a/pages/results_page.py +++ b/pages/results_page.py @@ -8,7 +8,6 @@ import dash import dash_mantine_components as dmc import pandas as pd -import plotly.express as px from dash import Input, Output, State, callback, dcc, no_update from layout.charts import chart_tabs @@ -19,6 +18,7 @@ from src.loads import get_load_data from src.metadata import Metadata from src.visuals import ( + empty_figure, plot_emission_scenarios_grouped, plot_emissions_heatmap, plot_energy_and_emissions, @@ -50,6 +50,15 @@ def layout(): [ dmc.LoadingOverlay( id="results-loading-overlay", + # Always starts visible: this is a static prop + # baked into the page's initial markup, not a + # callback, so it can't be made conditional on + # settings-dirty-store (unreadable at layout() + # render time, and no callback may target this + # page-specific component from a page-agnostic + # Input like url.pathname — see + # auto_calculate_on_results). control_loading_overlay + # below hides it again quickly on every visit. visible=True, overlayProps={"radius": "md", "blur": 10}, zIndex=10, @@ -114,7 +123,7 @@ def show_project_summary(metadata_json, unit_mode): Input("gas-toggle", "value"), Input("frequency-dropdown", "value"), Input("unit-toggle", "value"), - # prevent_initial_call=True + prevent_initial_call=True, ) def update_meter_plot( session_data, @@ -127,7 +136,7 @@ def update_meter_plot( ): df = load_source_energy(session_data) if df is None or not emission_scenarios or not equipment_scenarios: - return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") + return empty_figure() # flags from toggles stacked = "stacked" in stacked_value @@ -152,11 +161,12 @@ def update_meter_plot( Input("total-equipment-scen-dropdown", "value"), Input("total-emission-scen-dropdown", "value"), Input("unit-toggle", "value"), + prevent_initial_call=True, ) def update_total_emissions_plot(session_data, equipment_scenarios, emission_scenario, unit_mode): df = load_source_energy(session_data) if df is None or emission_scenario is None or not equipment_scenarios: - return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") + return empty_figure() if isinstance(emission_scenario, str): emission_scenario = [emission_scenario] @@ -171,11 +181,12 @@ def update_total_emissions_plot(session_data, equipment_scenarios, emission_scen Input("emission-em-scen-dropdown", "value"), Input("unit-toggle", "value"), State("selected-equipment-store", "data"), # preserves user ordering + prevent_initial_call=True, ) def update_emissions_bar_plot(session_data, emission_scenarios, unit_mode, selected_equipment_ids): df = load_source_energy(session_data) if df is None or not emission_scenarios: - return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") + return empty_figure() # Use user-defined order from selected-equipment-store df_ids = set(df["eq_scen_id"].unique()) @@ -185,7 +196,7 @@ def update_emissions_bar_plot(session_data, emission_scenarios, unit_mode, selec equipment_scenarios = list(df_ids) if not equipment_scenarios: - return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") + return empty_figure() # Ensure emission_scenarios is a list if isinstance(emission_scenarios, str): @@ -204,14 +215,14 @@ def update_emissions_bar_plot(session_data, emission_scenarios, unit_mode, selec Input("heatmap-emission-scen-dropdown", "value"), Input("heatmap-emission-type-dropdown", "value"), Input("unit-toggle", "value"), - # prevent_initial_call=True + prevent_initial_call=True, ) def update_emissions_heatmap( session_data, equipment_scenario, emission_scenario, emission_type, unit_mode ): df = load_source_energy(session_data) if df is None or not equipment_scenario or not emission_scenario: - return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") + return empty_figure() fig = plot_emissions_heatmap( df, @@ -231,7 +242,7 @@ def update_emissions_heatmap( Input("scatter-yvar-dropdown", "value"), Input("scatter-frequency-dropdown", "value"), Input("unit-toggle", "value"), - # prevent_initial_call=True + prevent_initial_call=True, ) def update_scatter_plot( session_data, @@ -243,7 +254,7 @@ def update_scatter_plot( ): df = load_source_energy(session_data) if df is None or not equipment_scenarios or not emission_scenario: - return px.line(x=[0, 1], y=[0, 0], title="Waiting for data...") + return empty_figure() frequency_value = frequency_value if frequency_value else "D" @@ -417,12 +428,14 @@ def _add_metadata_files( Output("scatter-equipment-scen-dropdown", "data"), Output("scatter-equipment-scen-dropdown", "value"), Input("session-store", "data"), - Input("results-ready-store", "data"), + Input("results-refresh-store", "data"), State("selected-equipment-store", "data"), # optional, keeps user ordering State("equipment-scenario-number-map", "data"), # display numbers (1-5) prevent_initial_call=True, ) -def populate_equipment_dropdowns(session_data, _results_ready, selected_equipment_ids, number_map): +def populate_equipment_dropdowns( + session_data, _results_refresh, selected_equipment_ids, number_map +): """ Populate all equipment scenario dropdowns with only the scenarios that were actually computed for this session. @@ -507,7 +520,7 @@ def eq_sort_key(scen_id): Output("scatter-emission-scen-dropdown", "data"), Output("scatter-emission-scen-dropdown", "value"), Input("session-store", "data"), - Input("results-ready-store", "data"), + Input("results-refresh-store", "data"), State("selected-emissions-store", "data"), # preserves user ordering # previous values to infer single vs multi & keep user choices where possible State("emission-scen-dropdown", "value"), @@ -519,7 +532,7 @@ def eq_sort_key(scen_id): ) def populate_emission_dropdowns( session_data, - _results_ready, + _results_refresh, selected_emission_ids, prev_emission_scen, prev_total_em, @@ -630,7 +643,7 @@ def pick_value(prev_val): @callback( Output("results-ready-store", "data", allow_duplicate=True), - Output("results-calculating-store", "data", allow_duplicate=True), + Output("results-refresh-store", "data", allow_duplicate=True), Output("notification-container", "sendNotifications", allow_duplicate=True), Output("settings-dirty-store", "data", allow_duplicate=True), Input("url", "pathname"), @@ -651,7 +664,30 @@ def auto_calculate_on_results( session_data, settings_dirty, ): - """Auto-trigger full site→source calculation when the user navigates to the Results tab.""" + """Auto-trigger full site→source calculation when the user navigates to the Results tab. + + This callback must not output to anything defined only inside the Results + page's layout (e.g. results-loading-overlay): its Input is the app-wide + "url" pathname, which changes on every navigation, including to pages + where such a component doesn't exist in the DOM — Dash's client-side + validator hard-errors ("nonexistent object ... in an Output") the moment + that fires while looking at a page that doesn't have it, regardless of + the pathname guard below (that guard runs in the Python callback body, + which is irrelevant to the client-side check). Only components that are + always present (the shell-level stores/notification container) are safe + Outputs here. + + results-refresh-store is bumped on every branch below (including the + early-exit guards), never just on a successful calculation: it is the + single, unconditional "repaint the results view now" pulse that + populate_equipment_dropdowns/populate_emission_dropdowns key off of, so + that a revisit with unchanged (not dirty) settings still repaints the + dropdowns/charts from whatever is authoritatively on disk instead of + leaving them on the hardcoded placeholder values baked into + layout/charts.py. results-ready-store, by contrast, keeps its narrower + meaning ("a fresh calculation just completed") and is only bumped on + real success, since it also gates the Download button. + """ if pathname != URLS.RESULTS.value: raise dash.exceptions.PreventUpdate @@ -721,9 +757,21 @@ def auto_calculate_on_results( @callback( Output("results-loading-overlay", "visible"), - Input("results-calculating-store", "data"), + Input("emissions-bar-plot", "figure"), prevent_initial_call=True, ) -def control_loading_overlay(_store_data): - """Hide the loading overlay whenever the calculation store is updated.""" +def control_loading_overlay(_figure): + """Hide the loading overlay once the default (Emissions) tab's chart has + actually redrawn with current data — i.e. once auto_calculate_on_results, + dropdown repopulation, and the first real chart redraw have all completed. + + Both this callback's Input and Output only exist while the Results page + is mounted, which is what makes it safe (see the note on + auto_calculate_on_results above). It reliably fires exactly once per + visit because results-refresh-store is guaranteed to bump on every + landing (see auto_calculate_on_results), which always concretely sets + every dropdown output in populate_emission_dropdowns (never no_update), + which in turn always re-triggers this chart's figure callback — whether + or not a recalculation actually happened. + """ return False diff --git a/src/visuals.py b/src/visuals.py index 66f23b9..2df0ec4 100644 --- a/src/visuals.py +++ b/src/visuals.py @@ -22,6 +22,27 @@ rose_medium = "#E7115E" +def empty_figure(message: str = "No results to display yet") -> go.Figure: + """A blank, on-theme figure for charts with no data to show yet.""" + fig = go.Figure() + fig.update_layout( + xaxis={"visible": False}, + yaxis={"visible": False}, + annotations=[ + { + "text": message, + "xref": "paper", + "yref": "paper", + "x": 0.5, + "y": 0.5, + "showarrow": False, + "font": {"size": 16, "color": "#868e96"}, + } + ], + ) + return fig + + def apply_standard_layout(fig, y_offset=-0.4, subtitle_text=None): # Keep existing annotations (like subplot titles) existing_annotations = list(fig.layout.annotations) if fig.layout.annotations else [] From 60b77df8993a787f3c1949d828a7b38ac19e9fb1 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 15 Sep 2026 09:11:27 -0700 Subject: [PATCH 40/48] fix: adjust auto calc behavior --- layout/shell.py | 14 +------------- pages/results_page.py | 44 +++++++++++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/layout/shell.py b/layout/shell.py index fe45ac6..61e6a59 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -78,7 +78,7 @@ def build_shell(page_content): dcc.Store(id="emission-scenario-group-store", storage_type="session", data="year"), dcc.Store(id="results-ready-store", storage_type="session", data=False), dcc.Store(id="results-refresh-store", storage_type="memory", data=None), - dcc.Store(id="settings-dirty-store", storage_type="session", data=True), + dcc.Store(id="last-calculated-settings-store", storage_type="session", data=None), dcc.Location(id="nav-location", refresh=True), dcc.Download(id="download-data"), ] @@ -369,15 +369,3 @@ def update_equipment_number_map(selected_ids): def toggle_download_button(results_ready): has_results = bool(results_ready) return not has_results, has_results - - -@callback( - Output("settings-dirty-store", "data", allow_duplicate=True), - Input("metadata-store", "data"), - Input("equipment-store", "data"), - Input("selected-equipment-store", "data"), - Input("selected-emissions-store", "data"), - prevent_initial_call=True, -) -def mark_settings_dirty(*_): - return True diff --git a/pages/results_page.py b/pages/results_page.py index fe7d275..27ac937 100644 --- a/pages/results_page.py +++ b/pages/results_page.py @@ -53,10 +53,10 @@ def layout(): # Always starts visible: this is a static prop # baked into the page's initial markup, not a # callback, so it can't be made conditional on - # settings-dirty-store (unreadable at layout() - # render time, and no callback may target this - # page-specific component from a page-agnostic - # Input like url.pathname — see + # last-calculated-settings-store (unreadable at + # layout() render time, and no callback may + # target this page-specific component from a + # page-agnostic Input like url.pathname — see # auto_calculate_on_results). control_loading_overlay # below hides it again quickly on every visit. visible=True, @@ -645,14 +645,14 @@ def pick_value(prev_val): Output("results-ready-store", "data", allow_duplicate=True), Output("results-refresh-store", "data", allow_duplicate=True), Output("notification-container", "sendNotifications", allow_duplicate=True), - Output("settings-dirty-store", "data", allow_duplicate=True), + Output("last-calculated-settings-store", "data", allow_duplicate=True), Input("url", "pathname"), State("metadata-store", "data"), State("equipment-store", "data"), State("selected-equipment-store", "data"), State("selected-emissions-store", "data"), State("session-store", "data"), - State("settings-dirty-store", "data"), + State("last-calculated-settings-store", "data"), prevent_initial_call=True, ) def auto_calculate_on_results( @@ -662,7 +662,7 @@ def auto_calculate_on_results( selected_scenarios, selected_emission_ids, session_data, - settings_dirty, + last_calculated_settings, ): """Auto-trigger full site→source calculation when the user navigates to the Results tab. @@ -677,11 +677,25 @@ def auto_calculate_on_results( always present (the shell-level stores/notification container) are safe Outputs here. + Whether to skip the expensive recompute is decided by comparing the + CURRENT settings directly against a snapshot of what was actually used + for the last successful calculation (last-calculated-settings-store) — + not by a separately-maintained "dirty" boolean. An earlier version used + a settings-dirty-store flag set by a watcher callback on metadata-store/ + equipment-store/selected-equipment-store/selected-emissions-store, but + that watcher re-fired (and wrongly marked settings dirty) on every page + navigation, not just on real edits — Dash re-dispatches callbacks whose + Inputs are already present in the DOM on every dash-pages navigation, + and prevent_initial_call only suppresses the very first, true app-startup + dispatch, not these later ones. A direct snapshot comparison, done here + at the only place that matters (arrival at Results, already gated on + pathname), sidesteps that entirely. + results-refresh-store is bumped on every branch below (including the early-exit guards), never just on a successful calculation: it is the single, unconditional "repaint the results view now" pulse that populate_equipment_dropdowns/populate_emission_dropdowns key off of, so - that a revisit with unchanged (not dirty) settings still repaints the + that a revisit with unchanged settings still repaints the dropdowns/charts from whatever is authoritatively on disk instead of leaving them on the hardcoded placeholder values baked into layout/charts.py. results-ready-store, by contrast, keeps its narrower @@ -691,7 +705,17 @@ def auto_calculate_on_results( if pathname != URLS.RESULTS.value: raise dash.exceptions.PreventUpdate - if not settings_dirty: + current_settings = { + "metadata": metadata_json, + "equipment": equipment_json, + "selected_equipment": selected_scenarios, + "selected_emissions": selected_emission_ids, + } + + if ( + current_settings == last_calculated_settings + and load_source_energy(session_data) is not None + ): return no_update, time.time(), no_update, no_update if not metadata_json: @@ -744,7 +768,7 @@ def auto_calculate_on_results( "Calculation Complete", "Source emissions calculation finished successfully.", ) - return time.time(), time.time(), [success], False + return time.time(), time.time(), [success], current_settings except Exception as e: logger.exception(f"Auto-calculation error on Results navigation: {e}") From acb9c4d40ac974369976e3022fc70944c7c701fd Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 15 Sep 2026 09:47:17 -0700 Subject: [PATCH 41/48] fix: adjust trigger to fire correctly --- layout/input.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/layout/input.py b/layout/input.py index 3af1f1d..0e053d2 100644 --- a/layout/input.py +++ b/layout/input.py @@ -643,7 +643,8 @@ def build_equipment_table( (field, label) for field, label in row_config if field in equipment_df.columns ] - active_ids = set(active_ids or []) + active_ids_ordered = list(active_ids or []) + active_ids = set(active_ids_ordered) active_col_style = TABLE_STYLE.active_col_style inactive_col_style = TABLE_STYLE.inactive_col_style @@ -841,7 +842,7 @@ def build_equipment_table( return dmc.CheckboxGroup( id="equipment-checkbox-group", - value=list(active_ids), + value=active_ids_ordered, children=table, ) @@ -1239,7 +1240,8 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un (field, label) for field, label in row_config if field in emission_df.columns ] - active_ids = set(active_ids or []) + active_ids_ordered = list(active_ids or []) + active_ids = set(active_ids_ordered) active_col_style = TABLE_STYLE.active_col_style inactive_col_style = TABLE_STYLE.inactive_col_style @@ -1399,7 +1401,7 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un return dmc.CheckboxGroup( id="emissions-checkbox-group", - value=list(active_ids), + value=active_ids_ordered, children=table, ) From bbf2d7a87ef30cfd0ef99e6bda24c1fc583bcca2 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 15 Sep 2026 10:18:19 -0700 Subject: [PATCH 42/48] fix: move up Docs link in sidebar --- layout/shell.py | 33 +++++++++++++++++++++++++-------- src/config.py | 1 + 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/layout/shell.py b/layout/shell.py index 61e6a59..bd393d3 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -164,9 +164,11 @@ def build_navbar_content(): href=page["path"], id={"type": "navbar-link", "path": page["path"]}, active=False, # will be controlled by callback - rightSection=DashIconify(icon="ic:baseline-autorenew", width=16) - if page["path"] == "/results" - else None, + rightSection=( + DashIconify(icon="ic:baseline-autorenew", width=16) + if page["path"] == "/results" + else None + ), ) for page in pages ] @@ -186,6 +188,21 @@ def build_navbar_content(): fz="sm", ) + repo_link = dmc.Anchor( + dmc.Group( + [ + DashIconify(icon="akar-icons:github-outline-fill", width=25), + "GitHub Repository", + ], + gap="xs", # Gap between icon and text + align="center", + ), + href=LINKS.REPO_URL.value, + target="_blank", + underline=False, + fz="sm", + ) + return dmc.Stack( children=[ dmc.Stack(page_links, gap="sm"), @@ -207,6 +224,11 @@ def build_navbar_content(): id="download-tooltip", position="right", ), + dmc.Space(h="2"), + dmc.Stack( + [docs_link, repo_link], + gap="xs", + ), dmc.Divider(), legend_toggle(), html.Div( @@ -214,11 +236,6 @@ def build_navbar_content(): children=scenario_legend_accordion(), style={"display": "block"}, ), - dmc.Divider(), - dmc.Stack( # external resources section - [docs_link], - gap="xs", - ), ], gap="md", ) diff --git a/src/config.py b/src/config.py index f79c319..62fef6b 100644 --- a/src/config.py +++ b/src/config.py @@ -10,6 +10,7 @@ class URLS(Enum): class LINKS(Enum): DOCS_URL: str = "https://cbe-berkeley.gitbook.io/decarb" + REPO_URL: str = "https://github.com/CenterForTheBuiltEnvironment/decarb-tool" class DEFAULT_SELECTIONS(Enum): From 70c5389a5e0496f3f7e03646029574c5579d1073 Mon Sep 17 00:00:00 2001 From: urwahah Date: Tue, 15 Sep 2026 17:41:21 -0700 Subject: [PATCH 43/48] move docs link references to config.py --- layout/input.py | 8 ++++---- pages/emissions_page.py | 4 ++-- pages/equipment_page.py | 4 ++-- pages/loads_page.py | 4 ++-- src/config.py | 12 ++++++++++++ 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/layout/input.py b/layout/input.py index 696dc95..9367613 100644 --- a/layout/input.py +++ b/layout/input.py @@ -14,7 +14,7 @@ value_deemphasis_style, ) from src import paths -from src.config import EmissionTableRows, EquipmentTableRows +from src.config import LINKS, EmissionTableRows, EquipmentTableRows from utils.tooltips import with_icon_and_tooltip, with_tooltip @@ -357,7 +357,7 @@ def modal_load_data_selection(buildings_df: pd.DataFrame): "loads.load_library_docs", order=5, icon="basil:book-open-outline", - href="https://cbe-berkeley.gitbook.io/decarb/documentation/loads/load-types", + href=LINKS.LOAD_LIBRARY_DOCS_URL.value, position="right", ), children=[ @@ -917,7 +917,7 @@ def edit_equipment_modal(): "equipment.equipment_input_docs", order=5, icon="basil:book-open-outline", - href="https://cbe-berkeley.gitbook.io/decarb/documentation/equipment#inputs", + href=LINKS.EQUIPMENT_INPUT_DOCS_URL.value, position="right", ), size="lg", @@ -1913,7 +1913,7 @@ def _options(values): "emissions.emissions_input_docs", order=5, icon="basil:book-open-outline", - href="https://cbe-berkeley.gitbook.io/decarb/documentation/emissions#inputs", + href=LINKS.EMISSION_INPUT_DOCS_URL.value, position="right", ), size="lg", diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 354ba92..0f2382b 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -18,7 +18,7 @@ from dash_iconify import DashIconify from layout.input import add_emission_modal, build_emissions_table, edit_emission_modal -from src.config import URLS, EmissionScenarioDefaults +from src.config import LINKS, URLS, EmissionScenarioDefaults from src.energy import site_to_source from src.metadata import Metadata from utils.error_handling import ( @@ -51,7 +51,7 @@ def layout(): "emissions.emissions_docs", order=5, icon="basil:book-open-outline", - href="https://cbe-berkeley.gitbook.io/decarb/documentation/emissions", + href=LINKS.EMISSION_DOCS_URL.value, ), dmc.Text( "Specify and select emission scenarios to include in the analysis.", diff --git a/pages/equipment_page.py b/pages/equipment_page.py index f479d63..44b444d 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -21,7 +21,7 @@ build_equipment_table, edit_equipment_modal, ) -from src.config import URLS +from src.config import LINKS, URLS from utils.logging_config import get_logger from utils.tooltips import with_icon_and_tooltip, with_tooltip @@ -49,7 +49,7 @@ def layout(): "equipment.equipment_docs", order=5, icon="basil:book-open-outline", - href="https://cbe-berkeley.gitbook.io/decarb/documentation/equipment", + href=LINKS.EQUIPMENT_DOCS_URL.value, ), dmc.Text( "Specify and select equipment scenarios to include in the analysis.", diff --git a/pages/loads_page.py b/pages/loads_page.py index cd7340f..50eccce 100644 --- a/pages/loads_page.py +++ b/pages/loads_page.py @@ -29,7 +29,7 @@ load_characteristics_card, ) from src import paths -from src.config import URLS +from src.config import LINKS, URLS from src.loads import STANDARD_COLUMNS, StandardLoad, get_load_data from src.metadata import LoadData, Metadata from utils.error_handling import create_success_notification @@ -74,7 +74,7 @@ def layout(): "loads.loads_docs", order=5, icon="basil:book-open-outline", - href="https://cbe-berkeley.gitbook.io/decarb/documentation/loads", + href=LINKS.LOAD_DOCS_URL.value, ), html.Hr(), select_load_type(), diff --git a/src/config.py b/src/config.py index 4c3338b..23d066a 100644 --- a/src/config.py +++ b/src/config.py @@ -10,6 +10,18 @@ class URLS(Enum): class LINKS(Enum): DOCS_URL: str = "https://cbe-berkeley.gitbook.io/decarb" + LOAD_DOCS_URL: str = "https://cbe-berkeley.gitbook.io/decarb/documentation/loads" + LOAD_LIBRARY_DOCS_URL: str = ( + "https://cbe-berkeley.gitbook.io/decarb/documentation/loads/load-types" + ) + EQUIPMENT_DOCS_URL: str = "https://cbe-berkeley.gitbook.io/decarb/documentation/equipment" + EQUIPMENT_INPUT_DOCS_URL: str = ( + "https://cbe-berkeley.gitbook.io/decarb/documentation/equipment#inputs" + ) + EMISSION_DOCS_URL: str = "https://cbe-berkeley.gitbook.io/decarb/documentation/emissions" + EMISSION_INPUT_DOCS_URL: str = ( + "https://cbe-berkeley.gitbook.io/decarb/documentation/emissions#inputs" + ) class DEFAULT_SELECTIONS(Enum): From b8199854cd5851fc7758e94bebf6150ec9b5d1fd Mon Sep 17 00:00:00 2001 From: t-kramer Date: Tue, 15 Sep 2026 18:01:02 -0700 Subject: [PATCH 44/48] fix: re-add repo link after merge --- src/config.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/config.py b/src/config.py index 5663593..c304a1b 100644 --- a/src/config.py +++ b/src/config.py @@ -10,6 +10,9 @@ class URLS(Enum): class LINKS(Enum): DOCS_URL: str = "https://cbe-berkeley.gitbook.io/decarb" + REPO_URL: str = "https://github.com/CenterForTheBuiltEnvironment/decarb-tool" + + # --- Documentation links --- LOAD_DOCS_URL: str = "https://cbe-berkeley.gitbook.io/decarb/documentation/loads" LOAD_LIBRARY_DOCS_URL: str = ( "https://cbe-berkeley.gitbook.io/decarb/documentation/loads/load-types" From 0760011e0a48f28a5126cb7da4f26b6b090f463a Mon Sep 17 00:00:00 2001 From: urwahah Date: Tue, 15 Sep 2026 20:21:34 -0700 Subject: [PATCH 45/48] update AWHP scenario group name, correct HHWST to be consistent --- data/input/equipment_data.JSON | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/input/equipment_data.JSON b/data/input/equipment_data.JSON index 0da0145..6d031d7 100644 --- a/data/input/equipment_data.JSON +++ b/data/input/equipment_data.JSON @@ -1544,7 +1544,7 @@ "awhp_sizing_mode": "integer_sizing_peak_load", "awhp_sizing_value": 1, "awhp_redundancy": 1, - "awhp_h_supply_t": 50, + "awhp_h_supply_t": 45, "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", @@ -1561,7 +1561,7 @@ "awhp_sizing_mode": "integer_sizing_peak_load", "awhp_sizing_value": 1, "awhp_redundancy": 1, - "awhp_h_supply_t": 50, + "awhp_h_supply_t": 45, "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", @@ -1578,7 +1578,7 @@ "awhp_sizing_mode": "integer_sizing_peak_load", "awhp_sizing_value": 1, "awhp_redundancy": 1, - "awhp_h_supply_t": 40, + "awhp_h_supply_t": 45, "awhp_use_cooling": true, "awhp_sizing_priority": "heating", "backup_heating": "res02", @@ -1647,7 +1647,7 @@ }, { "group_id": "awhp_refrigerant_types", - "group_name": "Varying AWHP Refrigerant", + "group_name": "Varying AWHP Model+Refrigerant", "scenario_ids": ["eq_scenario_19", "eq_scenario_20", "eq_scenario_21"] }, { From ba0d6428675ac08443ec8c9a6933b0cd93a46b6d Mon Sep 17 00:00:00 2001 From: praftery Date: Wed, 16 Sep 2026 12:07:30 -0700 Subject: [PATCH 46/48] removed or defined undefined acronyms --- docs/documentation/emissions.md | 4 ++-- layout/input.py | 6 +++--- layout/output.py | 4 ++-- pages/equipment_page.py | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/documentation/emissions.md b/docs/documentation/emissions.md index a04fedc..32c18f0 100644 --- a/docs/documentation/emissions.md +++ b/docs/documentation/emissions.md @@ -24,9 +24,9 @@ The grid scenarios project the possible evolution of the US electricity sector t 6. **High Natural Gas Prices**: The same set of base assumptions as the first scenario but where natural gas prices are assumed to be higher. 7. **Low Renewable Energy and Battery Costs With High Natural Gas Prices**: The same set of base assumptions as the first scenario but with higher natural gas prices and where renewable energy and battery costs are assumed to be lower and performance improvements greater. -#### GEA Grid Region +#### Generation and Emission Assessment Grid Region -The Generation and Emission Assessment grid region. GEA regions are based on data from the [EPA's eGRID subregions](https://www.epa.gov/green-power-markets/us-grid-regions). This input is automatically populated based on the specified building location, but can be edited by the user. +The Generation and Emission Assessment (GEA) grid region. GEA grid regions are based on data from the [EPA's eGRID subregions](https://www.epa.gov/green-power-markets/us-grid-regions). This input is automatically populated based on the specified building location, but can be edited by the user. #### Emission Type diff --git a/layout/input.py b/layout/input.py index e5b0746..f4ff02e 100644 --- a/layout/input.py +++ b/layout/input.py @@ -120,7 +120,7 @@ def select_location(): ), html.Br(), html.P( - "Overwrites GEA grid region for emissions. If skipped, information is inferred from the selected load data." + "Overwrites grid region used for electricity emission factors. If skipped, information is inferred from the location of the selected load data." ), dcc.Dropdown( id="location-input", @@ -1214,7 +1214,7 @@ def build_emissions_table(emission_data, active_ids=None, view_mode="simple", un f"Constant grid emissions rate ({elec_emission_rate_unit})", ), ("grid_scenario", "Grid Scenario"), - ("gea_grid_region", "GEA Grid Region"), + ("gea_grid_region", "Generation and Emission Assessment Grid Region"), ("emission_type", "Emission Type"), ("annual_refrig_leakage_percent", "Refrigerant leakage (frac)"), ( @@ -1994,7 +1994,7 @@ def _options(values): ), dmc.Select( id="edit-em-gea-grid-region", - label="GEA grid region", + label="Generation and Emission Assessment grid region", placeholder="Select grid region", data=_options(emissions_index["gea_grid_region"]), searchable=True, diff --git a/layout/output.py b/layout/output.py index 4a26163..326e4ce 100644 --- a/layout/output.py +++ b/layout/output.py @@ -91,7 +91,7 @@ def building_characteristics_card(metadata: Metadata, unit_mode="SI"): ("building_type", "Building Type"), ("vintage", "Vintage"), ("climate_zone_output", "Climate Region"), - ("base_gea_grid_region", "GEA Grid Region"), + ("base_gea_grid_region", "Generation and Emission Assessment Grid Region"), ("area_sqm", "Building Area", "area"), ] return make_metadata_card( @@ -237,7 +237,7 @@ def summary_emissions_selection(metadata: Metadata, active_tab=None): emission_fields = [ ("grid_scenario", "Grid Scenario"), - ("gea_grid_region", "GEA Grid Region"), + ("gea_grid_region", "Generation and Emission Assessment Grid Region"), ("emission_type", "Emission Type"), ("shortrun_weighting", "Short-Run Weighting"), ("annual_refrig_leakage_percent", "Refrig. Leakage, p.a."), diff --git a/pages/equipment_page.py b/pages/equipment_page.py index 44b444d..b8ecf94 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -52,7 +52,7 @@ def layout(): href=LINKS.EQUIPMENT_DOCS_URL.value, ), dmc.Text( - "Specify and select equipment scenarios to include in the analysis.", + "Specify and select equipment scenarios to include in the analysis, including heat recovery water-to-water heat pumps (HR WWHP), air-to-water heat pumps (AWHPs), air cooled chillers, and gas or electric boilers", size="sm", c="dimmed", ), From 5eece99244f28040f90016c721805e9a22a0b596 Mon Sep 17 00:00:00 2001 From: t-kramer Date: Thu, 17 Sep 2026 11:42:33 -0700 Subject: [PATCH 47/48] fix: address #188, adjust scen ordering --- layout/charts.py | 5 +- layout/shell.py | 25 +-- pages/emissions_page.py | 23 ++- pages/equipment_page.py | 15 +- pages/results_page.py | 439 ++++++++++++++++++++-------------------- src/config.py | 4 + src/visuals.py | 9 +- 7 files changed, 270 insertions(+), 250 deletions(-) diff --git a/layout/charts.py b/layout/charts.py index d4c11de..37db16c 100644 --- a/layout/charts.py +++ b/layout/charts.py @@ -51,12 +51,13 @@ def _emission_scen_seed(): def emissions_bar_chart(): + seed_options = _emission_scen_seed() controls = _controls_bar( [ dmc.MultiSelect( id="emission-em-scen-dropdown", - data=_emission_scen_seed(), # will be overwritten dynamically - value=["em_scenario_a", "em_scenario_b", "em_scenario_c", "em_scenario_d"], + data=seed_options, # will be overwritten dynamically + value=[opt["value"] for opt in seed_options], placeholder="Emission Scenarios", searchable=True, clearable=True, diff --git a/layout/shell.py b/layout/shell.py index bd393d3..a200c47 100644 --- a/layout/shell.py +++ b/layout/shell.py @@ -13,7 +13,10 @@ from src import paths from src.config import DEFAULT_SELECTIONS, LINKS from src.equipment import load_library # adjust if path differs -from utils.display_registry import format_emission_scenario_id_short +from utils.display_registry import ( + format_emission_scenario_id_short, + format_equipment_scenario_id_short, +) from utils.tooltips import with_tooltip @@ -45,11 +48,6 @@ def build_shell(page_content): storage_type="session", data=DEFAULT_SELECTIONS.EQUIPMENT_SCENARIO.value, ), - dcc.Store( - id="equipment-scenario-number-map", - storage_type="session", - data={}, - ), dcc.Store( id="displayed-equipment-store", storage_type="session", @@ -302,10 +300,10 @@ def update_equipment_legend(equipment_data, selected_ids): return dmc.Text("No scenarios selected", c="dimmed", size="sm") rows = [] - for i, scen in enumerate(selected_scenarios): + for scen in selected_scenarios: scen_id = scen.get("eq_scen_id", "") scen_name = scen.get("eq_scen_name", scen_id) - short_id = str(i + 1) # Display position (1-5) instead of scenario ID suffix + short_id = format_equipment_scenario_id_short(scen_id) rows.append( dmc.Group( @@ -367,17 +365,6 @@ def update_emission_legend(metadata_data, selected_ids): return dmc.Stack(rows, gap="xs") -@callback( - Output("equipment-scenario-number-map", "data"), - Input("selected-equipment-store", "data"), -) -def update_equipment_number_map(selected_ids): - """Create mapping of scenario_id -> display_number (1-5).""" - if not selected_ids: - return {} - return {scen_id: i + 1 for i, scen_id in enumerate(selected_ids)} - - @callback( Output("download-button", "disabled"), Output("download-tooltip", "disabled"), diff --git a/pages/emissions_page.py b/pages/emissions_page.py index 36a94ee..4e383c9 100644 --- a/pages/emissions_page.py +++ b/pages/emissions_page.py @@ -16,8 +16,7 @@ from dash_iconify import DashIconify from layout.input import add_emission_modal, build_emissions_table, edit_emission_modal -from src.config import LINKS, URLS, EmissionScenarioDefaults -from src.energy import site_to_source +from src.config import LINKS, MAX_ACTIVE_EMISSION_SCENARIOS, URLS, EmissionScenarioDefaults from src.metadata import Metadata from utils.error_handling import ( create_error_notification, @@ -136,6 +135,13 @@ def layout(): "marginTop": "16px", }, ), + dmc.Text( + "You can select up to 5 active emission scenarios considered for the analysis.", + size="xs", + c="dimmed", + mt="xs", + ta="right", + ), ], withBorder=False, shadow="xs", @@ -205,10 +211,17 @@ def update_emissions_table(metadata_data, selected_emissions, view_mode, unit_mo def sync_active_emissions(selected_values): """ Keep selected-emissions-store in sync with the CheckboxGroup. - For now, no cap on number of active emission scenarios. + Enforce the max active scenarios rule by capping and reflecting + that back in the CheckboxGroup, mirroring equipment's behavior. """ - selected = selected_values or [] - return selected, selected + raw_selected = set(selected_values or []) + + # Order matches build_emissions_table's column order (sort by em_scen_id) + ordered_selected = sorted(raw_selected) + + capped_selected = ordered_selected[:MAX_ACTIVE_EMISSION_SCENARIOS] + + return capped_selected, capped_selected @callback( diff --git a/pages/equipment_page.py b/pages/equipment_page.py index b8ecf94..4edfeaa 100644 --- a/pages/equipment_page.py +++ b/pages/equipment_page.py @@ -21,7 +21,7 @@ build_equipment_table, edit_equipment_modal, ) -from src.config import LINKS, URLS +from src.config import LINKS, MAX_ACTIVE_EQUIPMENT_SCENARIOS, URLS from utils.logging_config import get_logger from utils.tooltips import with_icon_and_tooltip, with_tooltip @@ -131,6 +131,13 @@ def layout(): "marginTop": "16px", }, ), + dmc.Text( + "You can select up to 5 active equipment scenarios considered for the analysis.", + size="xs", + c="dimmed", + mt="xs", + ta="right", + ), ], withBorder=False, shadow="xs", @@ -464,7 +471,7 @@ def add_scenario_to_store(save_clicks, equipment_data, displayed_ids, base_id, n def sync_active_equipment(selected_values, displayed_ids): """ Keep selected-equipment-store in sync with the checkbox group. - Enforce the 'max 5 scenarios' rule by capping and reflecting + Enforce the max active scenarios rule by capping and reflecting that back in the CheckboxGroup. Preserves the displayed order (column order in the table) for chart consistency. """ @@ -476,8 +483,8 @@ def sync_active_equipment(selected_values, displayed_ids): else: ordered_selected = list(raw_selected) - # Enforce max 5 scenarios rule - capped_selected = ordered_selected[:5] + # Enforce max active scenarios rule + capped_selected = ordered_selected[:MAX_ACTIVE_EQUIPMENT_SCENARIOS] return capped_selected, capped_selected diff --git a/pages/results_page.py b/pages/results_page.py index 27ac937..e962f09 100644 --- a/pages/results_page.py +++ b/pages/results_page.py @@ -25,7 +25,7 @@ plot_meter_timeseries, plot_scatter_temp_vs_variable, ) -from utils.display_registry import format_emission_scenario_id +from utils.display_registry import format_emission_scenario_id, format_equipment_scenario_id from utils.error_handling import ( create_error_notification, create_success_notification, @@ -42,6 +42,16 @@ def layout(): return dmc.Container( [ + # Page-local mount signal: fires initialize_results_page only once + # this page's own DOM subtree — including every dropdown/graph that + # callback outputs to — has actually mounted. A page-agnostic Input + # like url.pathname changes (and can fire dependent callbacks) + # before dash-pages has finished swapping in this layout, which is + # what caused the "nonexistent object ... emission-scen-dropdown" + # client error. data=time.time() (not a static value) guarantees a + # genuinely new value on every single visit, so a remount is never + # mistaken for "nothing changed" and skipped. + dcc.Store(id="results-page-mount", data=time.time()), dmc.Grid( [ dmc.GridCol( @@ -54,10 +64,7 @@ def layout(): # baked into the page's initial markup, not a # callback, so it can't be made conditional on # last-calculated-settings-store (unreadable at - # layout() render time, and no callback may - # target this page-specific component from a - # page-agnostic Input like url.pathname — see - # auto_calculate_on_results). control_loading_overlay + # layout() render time). control_loading_overlay # below hides it again quickly on every visit. visible=True, overlayProps={"radius": "md", "blur": 10}, @@ -116,23 +123,23 @@ def show_project_summary(metadata_json, unit_mode): @callback( Output("meter-timeseries-plot", "figure"), - Input("session-store", "data"), Input("equipment-scen-dropdown", "value"), Input("emission-scen-dropdown", "value"), Input("stacked-toggle", "value"), Input("gas-toggle", "value"), Input("frequency-dropdown", "value"), Input("unit-toggle", "value"), + State("session-store", "data"), prevent_initial_call=True, ) def update_meter_plot( - session_data, equipment_scenarios, emission_scenarios, stacked_value, gas_value, frequency_value, unit_mode, + session_data, ): df = load_source_energy(session_data) if df is None or not emission_scenarios or not equipment_scenarios: @@ -157,13 +164,13 @@ def update_meter_plot( @callback( Output("energy-and-emissions-plot", "figure"), - Input("session-store", "data"), Input("total-equipment-scen-dropdown", "value"), Input("total-emission-scen-dropdown", "value"), Input("unit-toggle", "value"), + State("session-store", "data"), prevent_initial_call=True, ) -def update_total_emissions_plot(session_data, equipment_scenarios, emission_scenario, unit_mode): +def update_total_emissions_plot(equipment_scenarios, emission_scenario, unit_mode, session_data): df = load_source_energy(session_data) if df is None or emission_scenario is None or not equipment_scenarios: return empty_figure() @@ -177,13 +184,13 @@ def update_total_emissions_plot(session_data, equipment_scenarios, emission_scen @callback( Output("emissions-bar-plot", "figure"), - Input("session-store", "data"), Input("emission-em-scen-dropdown", "value"), Input("unit-toggle", "value"), State("selected-equipment-store", "data"), # preserves user ordering + State("session-store", "data"), prevent_initial_call=True, ) -def update_emissions_bar_plot(session_data, emission_scenarios, unit_mode, selected_equipment_ids): +def update_emissions_bar_plot(emission_scenarios, unit_mode, selected_equipment_ids, session_data): df = load_source_energy(session_data) if df is None or not emission_scenarios: return empty_figure() @@ -210,15 +217,15 @@ def update_emissions_bar_plot(session_data, emission_scenarios, unit_mode, selec @callback( Output("emissions-heatmap-plot", "figure"), - Input("session-store", "data"), Input("heatmap-equipment-scen-dropdown", "value"), Input("heatmap-emission-scen-dropdown", "value"), Input("heatmap-emission-type-dropdown", "value"), Input("unit-toggle", "value"), + State("session-store", "data"), prevent_initial_call=True, ) def update_emissions_heatmap( - session_data, equipment_scenario, emission_scenario, emission_type, unit_mode + equipment_scenario, emission_scenario, emission_type, unit_mode, session_data ): df = load_source_energy(session_data) if df is None or not equipment_scenario or not emission_scenario: @@ -236,21 +243,21 @@ def update_emissions_heatmap( @callback( Output("scatter-plot", "figure"), - Input("session-store", "data"), Input("scatter-equipment-scen-dropdown", "value"), Input("scatter-emission-scen-dropdown", "value"), Input("scatter-yvar-dropdown", "value"), Input("scatter-frequency-dropdown", "value"), Input("unit-toggle", "value"), + State("session-store", "data"), prevent_initial_call=True, ) def update_scatter_plot( - session_data, equipment_scenarios, emission_scenario, y_variable, frequency_value, unit_mode, + session_data, ): df = load_source_energy(session_data) if df is None or not equipment_scenarios or not emission_scenario: @@ -414,31 +421,11 @@ def _add_metadata_files( pass # never block the download for a metadata failure -@callback( - # total-equipment-scen-dropdown (multi) - Output("total-equipment-scen-dropdown", "data"), - Output("total-equipment-scen-dropdown", "value"), - # equipment-scen-dropdown (single) - Output("equipment-scen-dropdown", "data"), - Output("equipment-scen-dropdown", "value"), - # heatmap-equipment-scen-dropdown (single) - Output("heatmap-equipment-scen-dropdown", "data"), - Output("heatmap-equipment-scen-dropdown", "value"), - # scatter-equipment-scen-dropdown (multi) - Output("scatter-equipment-scen-dropdown", "data"), - Output("scatter-equipment-scen-dropdown", "value"), - Input("session-store", "data"), - Input("results-refresh-store", "data"), - State("selected-equipment-store", "data"), # optional, keeps user ordering - State("equipment-scenario-number-map", "data"), # display numbers (1-5) - prevent_initial_call=True, -) -def populate_equipment_dropdowns( - session_data, _results_refresh, selected_equipment_ids, number_map -): +def _equipment_dropdown_outputs(session_data, selected_equipment_ids): """ - Populate all equipment scenario dropdowns with only the scenarios - that were actually computed for this session. + Compute all equipment scenario dropdown options/values from only the + scenarios that were actually computed for this session. Returns the + 8-tuple (data/value pairs for total, meter, heatmap, scatter dropdowns). """ df = load_source_energy(session_data) if df is None: @@ -466,14 +453,10 @@ def eq_sort_key(scen_id): # Fallback: nothing computed return [], [], [], None, [], None, [], [] - # Build options list with user-friendly labels using display numbers (1-5) - number_map = number_map or {} + # Build options list with user-friendly labels derived from each + # scenario's own id, never renumbered based on the active subset options = [ - { - "label": f"Equipment Scen. {number_map.get(scen_id, '?')}", - "value": scen_id, - } - for scen_id in eq_ids + {"label": format_equipment_scenario_id(scen_id), "value": scen_id} for scen_id in eq_ids ] # Defaults: @@ -503,51 +486,25 @@ def eq_sort_key(scen_id): ) -@callback( - # emission-scen-dropdown (for meter timeseries) - Output("emission-scen-dropdown", "data"), - Output("emission-scen-dropdown", "value"), - # total-emission-scen-dropdown (for total energy/emissions plot) - Output("total-emission-scen-dropdown", "data"), - Output("total-emission-scen-dropdown", "value"), - # emission-em-scen-dropdown (for grouped bar) - Output("emission-em-scen-dropdown", "data"), - Output("emission-em-scen-dropdown", "value"), - # heatmap-emission-scen-dropdown (for heatmap) - Output("heatmap-emission-scen-dropdown", "data"), - Output("heatmap-emission-scen-dropdown", "value"), - # scatter-emission-scen-dropdown (for scatter) - Output("scatter-emission-scen-dropdown", "data"), - Output("scatter-emission-scen-dropdown", "value"), - Input("session-store", "data"), - Input("results-refresh-store", "data"), - State("selected-emissions-store", "data"), # preserves user ordering - # previous values to infer single vs multi & keep user choices where possible - State("emission-scen-dropdown", "value"), - State("total-emission-scen-dropdown", "value"), - State("emission-em-scen-dropdown", "value"), - State("heatmap-emission-scen-dropdown", "value"), - State("scatter-emission-scen-dropdown", "value"), - prevent_initial_call=True, -) -def populate_emission_dropdowns( +def _emission_dropdown_outputs( session_data, - _results_refresh, selected_emission_ids, prev_emission_scen, prev_total_em, - prev_em_em, prev_heatmap_em, prev_scatter_em, ): """ - Populate all emission scenario dropdowns with only the scenarios - that were actually computed for this session. + Compute all emission scenario dropdown options/values from only the + scenarios that were actually computed for this session. Returns the + 10-tuple (5 data/value pairs). We: - read em_scen_id from source_energy - intersect with selected-emissions-store (to preserve user order / choices) - - infer single vs multi from previous value type (str vs list). + - for single-select dropdowns, keep the user's chosen scenario if it's + still active; the one multi-select dropdown always shows every + active scenario (see emission_em_value below). """ df = load_source_energy(session_data) if df is None or "em_scen_id" not in df.columns: @@ -572,15 +529,13 @@ def populate_emission_dropdowns( if selected_emission_ids: em_ids = [sid for sid in selected_emission_ids if sid in df_ids] else: - em_ids = df_ids - - # Sort emission scenarios by their letter suffix (em_scenario_a < em_scenario_b < ...) - def em_sort_key(scen_id): - if scen_id.startswith("em_scenario_"): - return scen_id[len("em_scenario_") :] - return scen_id + # No user ordering available - sort by letter suffix as fallback + def em_sort_key(scen_id): + if scen_id.startswith("em_scenario_"): + return scen_id[len("em_scenario_") :] + return scen_id - em_ids = sorted(em_ids, key=em_sort_key) + em_ids = sorted(df_ids, key=em_sort_key) if not em_ids: empty_opts, none_val = [], None @@ -602,30 +557,28 @@ def em_sort_key(scen_id): {"label": format_emission_scenario_id(scen_id), "value": scen_id} for scen_id in em_ids ] - # Helper: choose new value based on previous value type (single vs multi) - def pick_value(prev_val): - if not em_ids: - return None - - # If dropdown is multi-select, its value is a list - if isinstance(prev_val, list): - # Keep only those still available; if none left, select all - filtered = [v for v in prev_val if v in em_ids] - return filtered or em_ids[:] # list - - # If dropdown is single-select, its value is a string (or None) + # Helper: preserve the user's single chosen scenario across visits, if + # it's still active; otherwise fall back to the first one. + def pick_single_value(prev_val): if isinstance(prev_val, str): return prev_val if prev_val in em_ids else em_ids[0] - - # Fallback: first scenario return em_ids[0] # Decide values for each dropdown - emission_scen_value = pick_value(prev_emission_scen) - total_emission_value = pick_value(prev_total_em) - emission_em_value = pick_value(prev_em_em) - heatmap_em_value = pick_value(prev_heatmap_em) - scatter_em_value = pick_value(prev_scatter_em) + emission_scen_value = pick_single_value(prev_emission_scen) + total_emission_value = pick_single_value(prev_total_em) + # emission-em-scen-dropdown is the one multi-select among these: always + # default to every currently active scenario, rather than trying to + # reconcile against its stale previous value. An earlier version + # intersected the previous value with em_ids (plus a separately-tracked + # "known ids" set for newly-added scenarios), but that silently dropped + # any active scenario that simply wasn't in the dropdown's last value — + # e.g. selecting A, C, D on the Emissions page after previously having + # A, B, C active would drop D, since D was neither in the stale previous + # value nor considered "new". + emission_em_value = em_ids[:] + heatmap_em_value = pick_single_value(prev_heatmap_em) + scatter_em_value = pick_single_value(prev_scatter_em) return ( options, @@ -646,36 +599,83 @@ def pick_value(prev_val): Output("results-refresh-store", "data", allow_duplicate=True), Output("notification-container", "sendNotifications", allow_duplicate=True), Output("last-calculated-settings-store", "data", allow_duplicate=True), - Input("url", "pathname"), + # total-equipment-scen-dropdown (multi) + Output("total-equipment-scen-dropdown", "data"), + Output("total-equipment-scen-dropdown", "value"), + # equipment-scen-dropdown (single) + Output("equipment-scen-dropdown", "data"), + Output("equipment-scen-dropdown", "value"), + # heatmap-equipment-scen-dropdown (single) + Output("heatmap-equipment-scen-dropdown", "data"), + Output("heatmap-equipment-scen-dropdown", "value"), + # scatter-equipment-scen-dropdown (multi) + Output("scatter-equipment-scen-dropdown", "data"), + Output("scatter-equipment-scen-dropdown", "value"), + # emission-scen-dropdown (for meter timeseries) + Output("emission-scen-dropdown", "data"), + Output("emission-scen-dropdown", "value"), + # total-emission-scen-dropdown (for total energy/emissions plot) + Output("total-emission-scen-dropdown", "data"), + Output("total-emission-scen-dropdown", "value"), + # emission-em-scen-dropdown (for grouped bar) + Output("emission-em-scen-dropdown", "data"), + Output("emission-em-scen-dropdown", "value"), + # heatmap-emission-scen-dropdown (for heatmap) + Output("heatmap-emission-scen-dropdown", "data"), + Output("heatmap-emission-scen-dropdown", "value"), + # scatter-emission-scen-dropdown (for scatter) + Output("scatter-emission-scen-dropdown", "data"), + Output("scatter-emission-scen-dropdown", "value"), + Input("results-page-mount", "data"), State("metadata-store", "data"), State("equipment-store", "data"), State("selected-equipment-store", "data"), State("selected-emissions-store", "data"), State("session-store", "data"), State("last-calculated-settings-store", "data"), - prevent_initial_call=True, + # previous values of the single-select dropdowns, to keep the user's + # chosen scenario if it's still active + State("emission-scen-dropdown", "value"), + State("total-emission-scen-dropdown", "value"), + State("heatmap-emission-scen-dropdown", "value"), + State("scatter-emission-scen-dropdown", "value"), + prevent_initial_call="initial_duplicate", ) -def auto_calculate_on_results( - pathname, +def initialize_results_page( + _page_mounted, metadata_json, equipment_json, selected_scenarios, selected_emission_ids, session_data, last_calculated_settings, + prev_emission_scen, + prev_total_em, + prev_heatmap_em, + prev_scatter_em, ): - """Auto-trigger full site→source calculation when the user navigates to the Results tab. - - This callback must not output to anything defined only inside the Results - page's layout (e.g. results-loading-overlay): its Input is the app-wide - "url" pathname, which changes on every navigation, including to pages - where such a component doesn't exist in the DOM — Dash's client-side - validator hard-errors ("nonexistent object ... in an Output") the moment - that fires while looking at a page that doesn't have it, regardless of - the pathname guard below (that guard runs in the Python callback body, - which is irrelevant to the client-side check). Only components that are - always present (the shell-level stores/notification container) are safe - Outputs here. + """Auto-calculate on arrival at Results, then (re)populate every + equipment/emission dropdown in one shot. + + Triggered solely by results-page-mount, a dcc.Store defined in this + page's own layout() with a fresh time.time() value on every visit (not a + static default) — so a remount is never mistaken for "nothing changed" + and skipped, and it can never fire before the rest of this same + layout() return (every dropdown/graph below) has mounted, since they're + all part of the exact same insertion. + + This used to be three separate callbacks: this one (triggered by the + app-wide "url" pathname) bumped results-refresh-store, which a second + and third callback (populate_equipment_dropdowns / populate_emission_ + dropdowns) used as their own Input to write the actual dropdowns. Each + extra hop was a separate place the client could resolve a change before + this page's components were registered, which is what produced the + "nonexistent object ... emission-scen-dropdown" client error — merging + everything into one callback with one Input removes every hop but the + first. prevent_initial_call="initial_duplicate" is required by the + allow_duplicate Outputs above; unlike plain True, it still fires on the + very first dispatch, which matters here since a fresh page mount is + never the app's one true cold-start dispatch anyway. Whether to skip the expensive recompute is decided by comparing the CURRENT settings directly against a snapshot of what was actually used @@ -684,99 +684,107 @@ def auto_calculate_on_results( a settings-dirty-store flag set by a watcher callback on metadata-store/ equipment-store/selected-equipment-store/selected-emissions-store, but that watcher re-fired (and wrongly marked settings dirty) on every page - navigation, not just on real edits — Dash re-dispatches callbacks whose - Inputs are already present in the DOM on every dash-pages navigation, - and prevent_initial_call only suppresses the very first, true app-startup - dispatch, not these later ones. A direct snapshot comparison, done here - at the only place that matters (arrival at Results, already gated on - pathname), sidesteps that entirely. - - results-refresh-store is bumped on every branch below (including the - early-exit guards), never just on a successful calculation: it is the - single, unconditional "repaint the results view now" pulse that - populate_equipment_dropdowns/populate_emission_dropdowns key off of, so - that a revisit with unchanged settings still repaints the - dropdowns/charts from whatever is authoritatively on disk instead of - leaving them on the hardcoded placeholder values baked into - layout/charts.py. results-ready-store, by contrast, keeps its narrower - meaning ("a fresh calculation just completed") and is only bumped on - real success, since it also gates the Download button. + navigation, not just on real edits — a fresh results-page-mount fires on + every single visit to this page. A direct snapshot comparison, done here + at the only place that matters (arrival at Results), sidesteps that + entirely. + + The dropdowns are always recomputed below, regardless of which branch + the calculation takes (including the early-exit guards), so a revisit + with unchanged settings still repaints them from whatever is + authoritatively on disk instead of leaving them on the hardcoded + placeholder values baked into layout/charts.py. results-ready-store, by + contrast, keeps its narrower meaning ("a fresh calculation just + completed") and is only bumped on real success, since it also gates the + Download button. """ - if pathname != URLS.RESULTS.value: - raise dash.exceptions.PreventUpdate - - current_settings = { - "metadata": metadata_json, - "equipment": equipment_json, - "selected_equipment": selected_scenarios, - "selected_emissions": selected_emission_ids, - } - - if ( - current_settings == last_calculated_settings - and load_source_energy(session_data) is not None - ): - return no_update, time.time(), no_update, no_update - if not metadata_json: - return no_update, time.time(), no_update, no_update - - metadata = Metadata(**metadata_json) - - if not metadata.load_data.load_type: - return no_update, time.time(), no_update, no_update + def run_calc(): + current_settings = { + "metadata": metadata_json, + "equipment": equipment_json, + "selected_equipment": selected_scenarios, + "selected_emissions": selected_emission_ids, + } - if not metadata.base_gea_grid_region: - notification = create_warning_notification( - "Missing Grid Region", - "Could not determine grid region. Please select a location on the Loads page.", - ) - return no_update, time.time(), [notification], no_update + if ( + current_settings == last_calculated_settings + and load_source_energy(session_data) is not None + ): + return no_update, time.time(), no_update, no_update - if not equipment_json or not selected_scenarios or not session_data: - return no_update, time.time(), no_update, no_update + if not metadata_json: + return no_update, time.time(), no_update, no_update - try: - folder = Path(f"/tmp/{session_data['session_id']}") - folder.mkdir(parents=True, exist_ok=True) - - equipment = EquipmentLibrary(**equipment_json) - load_data = get_load_data(metadata) - - # Step 1: loads → site energy - site_energy = loads_to_site_energy( - load_data, - equipment, - scenario_ids=selected_scenarios, - detail=True, - ) + metadata = Metadata(**metadata_json) - # Step 2: site → source emissions - if selected_emission_ids: - metadata.emission_settings = [ - scen - for scen in metadata.emission_settings - if scen.em_scen_id in selected_emission_ids - ] - source_energy = site_to_source(site_energy, metadata=metadata) - - source_path = folder / "source_energy.pkl" - source_energy.to_pickle(source_path) - logger.info(f"Auto-calculated source energy on Results navigation: {source_path}") - - success = create_success_notification( - "Calculation Complete", - "Source emissions calculation finished successfully.", - ) - return time.time(), time.time(), [success], current_settings + if not metadata.load_data.load_type: + return no_update, time.time(), no_update, no_update + + if not metadata.base_gea_grid_region: + notification = create_warning_notification( + "Missing Grid Region", + "Could not determine grid region. Please select a location on the Loads page.", + ) + return no_update, time.time(), [notification], no_update + + if not equipment_json or not selected_scenarios or not session_data: + return no_update, time.time(), no_update, no_update + + try: + folder = Path(f"/tmp/{session_data['session_id']}") + folder.mkdir(parents=True, exist_ok=True) + + equipment = EquipmentLibrary(**equipment_json) + load_data = get_load_data(metadata) + + # Step 1: loads → site energy + site_energy = loads_to_site_energy( + load_data, + equipment, + scenario_ids=selected_scenarios, + detail=True, + ) + + # Step 2: site → source emissions + if selected_emission_ids: + metadata.emission_settings = [ + scen + for scen in metadata.emission_settings + if scen.em_scen_id in selected_emission_ids + ] + source_energy = site_to_source(site_energy, metadata=metadata) + + source_path = folder / "source_energy.pkl" + source_energy.to_pickle(source_path) + logger.info(f"Auto-calculated source energy on Results navigation: {source_path}") + + success = create_success_notification( + "Calculation Complete", + "Source emissions calculation finished successfully.", + ) + return time.time(), time.time(), [success], current_settings + + except Exception as e: + logger.exception(f"Auto-calculation error on Results navigation: {e}") + notification = create_error_notification( + "Calculation Error", + "Automatic calculation failed. Please check your load and settings.", + ) + return no_update, time.time(), [notification], no_update + + calc_result = run_calc() + equipment_outputs = _equipment_dropdown_outputs(session_data, selected_scenarios) + emission_outputs = _emission_dropdown_outputs( + session_data, + selected_emission_ids, + prev_emission_scen, + prev_total_em, + prev_heatmap_em, + prev_scatter_em, + ) - except Exception as e: - logger.exception(f"Auto-calculation error on Results navigation: {e}") - notification = create_error_notification( - "Calculation Error", - "Automatic calculation failed. Please check your load and settings.", - ) - return no_update, time.time(), [notification], no_update + return (*calc_result, *equipment_outputs, *emission_outputs) @callback( @@ -786,16 +794,15 @@ def auto_calculate_on_results( ) def control_loading_overlay(_figure): """Hide the loading overlay once the default (Emissions) tab's chart has - actually redrawn with current data — i.e. once auto_calculate_on_results, - dropdown repopulation, and the first real chart redraw have all completed. + actually redrawn with current data — i.e. once initialize_results_page + and the first real chart redraw have all completed. Both this callback's Input and Output only exist while the Results page is mounted, which is what makes it safe (see the note on - auto_calculate_on_results above). It reliably fires exactly once per - visit because results-refresh-store is guaranteed to bump on every - landing (see auto_calculate_on_results), which always concretely sets - every dropdown output in populate_emission_dropdowns (never no_update), - which in turn always re-triggers this chart's figure callback — whether - or not a recalculation actually happened. + initialize_results_page above). It reliably fires exactly once per visit + because initialize_results_page always concretely sets every emission + dropdown output (never no_update), which in turn always re-triggers this + chart's figure callback — whether or not a recalculation actually + happened. """ return False diff --git a/src/config.py b/src/config.py index c304a1b..c7b659d 100644 --- a/src/config.py +++ b/src/config.py @@ -27,6 +27,10 @@ class LINKS(Enum): ) +MAX_ACTIVE_EQUIPMENT_SCENARIOS = 5 +MAX_ACTIVE_EMISSION_SCENARIOS = 5 + + class DEFAULT_SELECTIONS(Enum): EQUIPMENT_SCENARIO = ( "eq_scenario_1", diff --git a/src/visuals.py b/src/visuals.py index 2df0ec4..04564cd 100644 --- a/src/visuals.py +++ b/src/visuals.py @@ -6,6 +6,7 @@ from utils.display_registry import ( format_emission_scenario_id_short, + format_equipment_scenario_id_short, format_meter_name, ) from utils.units import ( @@ -156,7 +157,7 @@ def plot_energy_and_emissions(df, equipment_scenarios, emission_scenarios, unit_ df_s = df[df["eq_scen_id"] == scen] scen_name = name_map.get(scen, scen) - scen_label = str(i + 1) # Display position (1-5) instead of scenario ID suffix + scen_label = format_equipment_scenario_id_short(scen) elec_total = ( df_s[ @@ -219,7 +220,7 @@ def plot_energy_and_emissions(df, equipment_scenarios, emission_scenarios, unit_ for i, scen in enumerate(scenarios): df_s = df[df["eq_scen_id"] == scen] scen_name = name_map.get(scen, scen) - scen_label = str(i + 1) # Display position (1-5) instead of scenario ID suffix + scen_label = format_equipment_scenario_id_short(scen) elec_em = df_s["elec_emissions"].sum().sum() gas_em = df_s["gas_emissions"].sum().sum() @@ -373,7 +374,7 @@ def plot_emission_scenarios_grouped( for i, em_scen in enumerate(emission_scenarios): df_e = df[df["em_scen_id"] == em_scen] - for j, scen in enumerate(equipment_scenarios): + for scen in equipment_scenarios: df_s = df_e[df_e["eq_scen_id"] == scen] # if this combo doesn't exist in data, skip safely @@ -381,7 +382,7 @@ def plot_emission_scenarios_grouped( continue scen_name = df_s["eq_scen_name"].iloc[0] # for hover template - scen_label = str(j + 1) # Display position (1-5) instead of scenario ID suffix + scen_label = format_equipment_scenario_id_short(scen) elec_em = df_s["elec_emissions"].sum() gas_em = df_s["gas_emissions"].sum() From eb9928d98dfd23f06511ceda12cae359cf91f726 Mon Sep 17 00:00:00 2001 From: praftery Date: Thu, 17 Sep 2026 13:19:47 -0700 Subject: [PATCH 48/48] fix: pin loads library table header while scrolling Applies position: sticky to each header cell in the building selection table (Loads > Open Library modal) so column headings stay visible as users scroll through the row list. Co-Authored-By: Claude Sonnet 5 --- layout/input.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/layout/input.py b/layout/input.py index f4ff02e..5783476 100644 --- a/layout/input.py +++ b/layout/input.py @@ -289,6 +289,15 @@ def get_header_label(col_name: str, base_label: str) -> str: body_rows.append(dmc.TableTr(cells)) + # Sticky style applied to every header cell so the header row stays + # pinned to the top of the ScrollArea viewport while the body scrolls. + sticky_th_style = { + "position": "sticky", + "top": 0, + "zIndex": 2, + "backgroundColor": "var(--mantine-color-body)", + } + # Build header with clickable sort indicators def make_sort_header(col_name, label): is_active = col_name == sort_col @@ -311,10 +320,12 @@ def make_sort_header(col_name, label): id={"type": "building-sort-th", "col": col_name}, style={"cursor": "pointer", "userSelect": "none", "width": "100%"}, ), - style={"textTransform": "none"}, + style={"textTransform": "none", **sticky_th_style}, ) - header_cells = [dmc.TableTh("", style={"textTransform": "none"})] # radio column + header_cells = [ + dmc.TableTh("", style={"textTransform": "none", **sticky_th_style}) + ] # radio column header_cells.extend([make_sort_header(col, label) for col, label in available_columns]) header = dmc.TableThead(dmc.TableTr(header_cells))