Skip to content

Commit d66846a

Browse files
include sensitivity analysis columns in variance build csv and include R2 columns in variance CSV
1 parent f10233f commit d66846a

1 file changed

Lines changed: 21 additions & 14 deletions

File tree

src/geophires_docs/generate_fervo_project_red_2026_docs.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,6 @@ def get_project_red_production_temperature_profile_series(
470470
pd.Series,
471471
Any, # interpolator
472472
]:
473-
474473
input_and_result = get_project_red_input_params_and_result()
475474
input_params: GeophiresInputParameters = input_and_result[0]
476475

@@ -527,6 +526,7 @@ def _generate_fracture_sensitivity_graph(
527526
sensitivity_graph_path: Path,
528527
power_graph_path: Path,
529528
power_csv_path: Path,
529+
df_variance: pd.DataFrame | None = None,
530530
show_excluded_measured_temperatures: bool = False,
531531
calculate_stats: bool = True,
532532
) -> pd.DataFrame:
@@ -626,24 +626,27 @@ def _generate_fracture_sensitivity_graph(
626626
}
627627
)
628628

629-
label_prefix = 'GEOPHIRES: ' if frac_count == base_number_of_fractures else ''
630-
label_suffix = ' (Baseline)' if frac_count == base_number_of_fractures else ''
631-
632629
if calculate_stats and not df_included.empty:
633630
geo_interp = interp1d(geophires_x, geophires_y, kind='linear', fill_value='extrapolate')
634631
y_geo = geo_interp(df_included['Time_Years'])
635632

633+
if df_variance is not None:
634+
df_variance[f'GEOPHIRES_Modeled_Temperature_C_{frac_count}_Fractures'] = geo_interp(
635+
df_variance['Time_Years']
636+
)
637+
638+
rmse_g = float(np.sqrt(((y_true - y_geo) ** 2).mean()))
639+
bias_g = float((y_geo - y_true).mean())
636640
ss_res_g = float(np.sum((y_true - y_geo) ** 2))
641+
r2_g = 1.0 - (ss_res_g / ss_tot) if ss_tot != 0.0 else 0.0
637642

638-
calculated_stats = _StatsAlignmentResult(
639-
rmse_degc=float(np.sqrt(((y_true - y_geo) ** 2).mean())),
640-
bias_degc=float((y_geo - y_true).mean()),
641-
r2=1.0 - (ss_res_g / ss_tot) if ss_tot != 0.0 else 0.0,
642-
)
643+
if df_variance is not None:
644+
df_variance.loc[0, f'GEOPHIRES_R2_{frac_count}_Fractures'] = r2_g
643645

644-
_log.info(f'{frac_count} Fractures: {calculated_stats.as_caption}')
646+
_log.info(f'{frac_count} Fractures: RMSE={rmse_g:.2f}°C, R²={r2_g:.4f}, Bias={bias_g:.2f}°C')
645647

646-
label_suffix += f' (R²={calculated_stats.r2:.4f})'
648+
label_prefix = 'GEOPHIRES: ' if frac_count == base_number_of_fractures else ''
649+
label_suffix = ' (Baseline)' if frac_count == base_number_of_fractures else ''
647650

648651
ax.plot(
649652
geophires_x,
@@ -742,7 +745,6 @@ def generate_fervo_project_red_2026_md(
742745
geophires_stats_alignment: _StatsAlignmentResult,
743746
project_root: Path = _PROJECT_ROOT,
744747
) -> None:
745-
746748
result_values: dict[str, Any] = {} # get_result_values(result)
747749

748750
def _get_input_params_dict_with_nbsp() -> dict[str, Any]:
@@ -864,9 +866,10 @@ def generate_fervo_project_red_2026_docs():
864866
df_model_['Time_Years'], df_model_['Temperature_C'], kind='linear', fill_value='extrapolate'
865867
)
866868
df_variance['Fervo_Modeled_Temperature_C'] = model_interpolator(df_variance['Time_Years'])
867-
df_variance['GEOPHIRES_Modeled_Temperature_C'] = geo_interp(df_variance['Time_Years'])
869+
df_variance.loc[0, 'Fervo_R2'] = fervo_stat_result.r2
868870

869-
df_variance.to_csv(variance_analysis_csv_path, index=False)
871+
df_variance['GEOPHIRES_Modeled_Temperature_C'] = geo_interp(df_variance['Time_Years'])
872+
df_variance.loc[0, 'GEOPHIRES_R2'] = geophires_stat_result.r2
870873

871874
_tab = ' '
872875

@@ -899,9 +902,13 @@ def generate_fervo_project_red_2026_docs():
899902
_get_file_path(f'../../docs/_images/{_GENERATED_GRAPH_FILENAME_STEM}-fracture-sensitivity.png'),
900903
_get_file_path(f'../../docs/_images/{_GENERATED_GRAPH_FILENAME_STEM}-power-sensitivity.png'),
901904
_BUILD_DIR / 'project_red_2026_power_sensitivity.csv',
905+
df_variance=df_variance,
902906
)
903907
_log.info('Wrote sensitivity graphs and power data')
904908

909+
df_variance.to_csv(variance_analysis_csv_path, index=False)
910+
_log.info(f'Wrote variance analysis CSV: {variance_analysis_csv_path}')
911+
905912
generate_fervo_project_red_2026_md(
906913
*get_project_red_input_params_and_result(), fervo_stat_result, geophires_stat_result
907914
)

0 commit comments

Comments
 (0)