|
27 | 27 | _MODEL_ROLLING_WINDOW = 15 |
28 | 28 |
|
29 | 29 | _CONTINUOUS_OPERATION_MIN_TEMP_C = 175.0 |
| 30 | +_MAX_TRANSIENT_TEMP_CHANGE_C = 10.0 |
30 | 31 |
|
31 | 32 |
|
32 | 33 | def extract_plot_data( |
@@ -67,8 +68,14 @@ def _calculate_variance_analysis( |
67 | 68 |
|
68 | 69 | # TODO: Replace hardcoded minimum temperature threshold with a robust statistical baseline envelope |
69 | 70 | n_before = len(df_steady_state) |
70 | | - df_steady_state = df_steady_state[df_steady_state['Temperature_C'] >= _CONTINUOUS_OPERATION_MIN_TEMP_C].copy() |
71 | | - _log.info(f'Continuous operation filter: dropped {n_before - len(df_steady_state)} dip points.') |
| 71 | + |
| 72 | + temp_diffs = df_steady_state['Temperature_C'].diff().abs().fillna(0.0) |
| 73 | + is_steady = (df_steady_state['Temperature_C'] >= _CONTINUOUS_OPERATION_MIN_TEMP_C) & ( |
| 74 | + temp_diffs <= _MAX_TRANSIENT_TEMP_CHANGE_C |
| 75 | + ) |
| 76 | + |
| 77 | + df_steady_state = df_steady_state[is_steady].copy() |
| 78 | + _log.info(f'Continuous operation filter: dropped {n_before - len(df_steady_state)} transient/dip points.') |
72 | 79 |
|
73 | 80 | model_interpolator = interp1d( |
74 | 81 | df_model['Time_Years'], |
@@ -200,7 +207,14 @@ def _regenerate_graph_from_csv( |
200 | 207 |
|
201 | 208 | # Apply the exclusion logic directly via boolean mask to avoid float-merge bugs across CSVs |
202 | 209 | is_ramp_up = df_prod['Time_Years'] <= steady_state_start_years |
203 | | - is_steady = df_prod['Temperature_C'] >= _CONTINUOUS_OPERATION_MIN_TEMP_C |
| 210 | + |
| 211 | + post_ramp_up_mask = ~is_ramp_up |
| 212 | + temp_diffs = df_prod.loc[post_ramp_up_mask, 'Temperature_C'].diff().abs().fillna(0.0) |
| 213 | + |
| 214 | + is_steady = pd.Series(False, index=df_prod.index) |
| 215 | + is_steady.loc[post_ramp_up_mask] = ( |
| 216 | + df_prod.loc[post_ramp_up_mask, 'Temperature_C'] >= _CONTINUOUS_OPERATION_MIN_TEMP_C |
| 217 | + ) & (temp_diffs <= _MAX_TRANSIENT_TEMP_CHANGE_C) |
204 | 218 |
|
205 | 219 | df_included = df_prod[is_ramp_up | is_steady] |
206 | 220 | df_excluded = df_prod[~(is_ramp_up | is_steady)] |
|
0 commit comments