130 return this->leaf_parameters_changed;
134 return this->changed_leaf_metadata;
138 return this->external_wavelet_loaded;
144 return this->external_noise_spectrum_loaded;
148 if (!this->external_wavelet_loaded)
150 return this->external_wavelet;
154 if (!this->external_noise_loaded)
156 return this->external_noise;
160 if (!this->external_noise_spectrum_loaded)
162 return this->external_noise_spectrum;
213 int inverse_operator_nfft;
214 int gid_noise_samples_loaded, gid_noise_samples_used;
215 bool gid_noise_truncated;
216 std::string config_pf_text;
218 int ndwin, nnwin, noise_component;
219 int actual_o_0, iter_count, iter_max;
220 double residual_ratio_floor, residual_improvement_floor;
221 double resid_l2_initial, resid_l2_prev, resid_l2_final;
222 double resid_linf_initial, resid_linf_final;
223 double lag_weight_linf_final, lag_weight_l2_final;
224 IterDeconType decon_type;
225 std::unique_ptr<ScalarDecon> preprocessor;
226 std::unique_ptr<CNRDeconEngine> cnrprocessor;
231 bool external_wavelet_loaded, external_noise_loaded,
232 external_noise_spectrum_loaded, external_wavelet_allowed;
234 bool residual_noise_from_external;
235 bool leaf_parameters_changed;
236 int gid_analysis_samples, gid_wavelet_samples, gid_alignment_offset_samples;
237 double gid_analysis_t0, gid_wavelet_t0;
240 std::vector<double> actual_o_fir;
245 double gid_leaf_raw_zero_lag_gain;
246 double gid_inverse_domain_amplitude_scale;
247 std::vector<double> lag_weights, lag_weight_penalty;
248 std::vector<double> adaptive_penalty_memory;
249 std::vector<double> adaptive_penalty_retention;
250 std::list<ThreeCSpike> spikes;
251 double ns_peak_sigma_threshold, ns_peak_probability_threshold;
252 double ns_residual_noise_ratio_floor, ns_peak_threshold;
253 double ns_last_peak_significance, ns_noise_l2, ns_noise_amplitude_rms;
254 double ns_noise_component_sigma_rms, ns_noise_component_sigma_rms_robust;
255 double ns_noise_component_rms_aggregate;
256 bool ns_noise_component_sigma_rms_fallback_used;
257 double ns_residual_rms_initial, ns_residual_rms_final;
258 double ns_peak_threshold_empirical, ns_peak_threshold_sigma;
259 double ns_noise_amplitude_robust, ns_last_candidate_amplitude;
260 int ns_noise_samples_at_or_above_peak_threshold;
261 int ns_noise_amplitude_sample_count;
262 int ns_initial_stationary_null_search_lag_count;
263 double ns_initial_stationary_null_expected_noise_exceedances;
264 int ns_last_selected_candidate_lag;
265 double ns_last_selected_candidate_lag_weight;
266 double ns_last_selected_candidate_weighted_amplitude;
267 double ns_max_raw_candidate_amplitude, ns_max_raw_candidate_significance;
268 int ns_max_raw_candidate_lag;
269 bool ns_last_scan_raw_significant_candidate_remaining;
270 double ns_final_scan_max_raw_candidate_amplitude,
271 ns_final_scan_max_raw_candidate_significance;
272 int ns_final_scan_max_raw_candidate_lag;
273 bool ns_final_scan_raw_significant_candidate_remaining;
274 double ns_final_scan_existing_support_max_raw_amplitude,
275 ns_final_scan_existing_support_max_raw_significance;
276 int ns_final_scan_existing_support_max_raw_lag;
277 int ns_final_scan_significant_candidate_count;
278 int ns_final_scan_best_trial_lag;
279 double ns_final_scan_best_trial_residual_l2,
280 ns_final_scan_best_trial_fractional_improvement;
281 int ns_final_scan_decision_candidate_lag,
282 ns_final_scan_global_acceptable_candidate_count;
283 double ns_final_scan_decision_trial_residual_l2,
284 ns_final_scan_decision_trial_fractional_improvement;
285 std::string ns_final_scan_decision;
286 bool ns_final_scan_acceptable_candidate_remaining;
287 std::vector<double> ns_noise_component_rms;
288 std::vector<int> ns_candidate_lag_history, ns_candidate_accepted_history;
289 std::vector<double> ns_candidate_lag_time_history,
290 ns_candidate_amplitude_history,
291 ns_candidate_threshold_history, ns_candidate_significance_history;
292 std::vector<double> ns_candidate_post_residual_rms_ratio_history;
293 std::vector<double> ns_candidate_residual_l2_before_history,
294 ns_candidate_trial_residual_l2_history,
295 ns_candidate_post_refit_residual_l2_history,
296 ns_candidate_fractional_improvement_history,
297 ns_candidate_state_fractional_improvement_history;
298 std::vector<int> ns_candidate_periodic_refit_applied_history,
299 ns_candidate_final_refit_applied_history,
300 ns_candidate_trial_evaluated_history,
301 ns_candidate_metric_available_history;
302 std::vector<std::string> ns_candidate_stop_history;
304 int legacy_eq15_candidates_tested, legacy_eq15_candidates_rejected;
306 int legacy_eq15_post_acceptance_state_tests,
307 legacy_eq15_post_acceptance_floor_stops;
308 int legacy_eq15_candidates_below_floor, legacy_eq15_candidates_non_decreasing,
309 legacy_eq15_candidates_nonfinite,
310 legacy_eq15_rejected_lag_samples_truncated,
311 legacy_eq15_rejected_iteration_samples_truncated;
312 double legacy_eq15_last_trial_fractional_improvement;
313 std::string legacy_eq15_stop_detail;
314 std::vector<double> legacy_eq15_rejected_lag_times;
315 std::vector<int> legacy_eq15_rejected_candidates_per_iteration;
316 double ns_fractional_improvement_final,
317 ns_fractional_improvement_state_final, ns_ridge_beta;
318 int ns_max_spikes, ns_refit_interval;
320 int ns_refit_epochs, ns_refit_resume_count;
321 bool ns_use_empirical_noise_threshold, ns_converged;
322 bool ns_final_refit_applied;
323 std::string ns_stop_reason, ns_provisional_stop_reason_before_final_refit;
325 std::string gid_stop_reason;
326 std::string lag_weight_penalty_function;
327 double lag_weight_penalty_scale_factor;
328 int lag_weight_function_width;
329 double adaptive_penalty_last_confidence;
330 double adaptive_penalty_last_immediate_strength;
331 double adaptive_penalty_last_specificity;
332 double adaptive_penalty_last_decay_factor;
333 double adaptive_penalty_noise_amplitude;
334 double adaptive_penalty_memory_linf;
335 double adaptive_penalty_memory_l2;
336 double group_sparse_lambda, group_sparse_lambda_scale;
337 double group_sparse_lambda_used, group_sparse_tolerance;
338 double group_sparse_active_threshold, group_sparse_active_threshold_scale;
339 double group_sparse_active_threshold_quantile;
340 double group_sparse_active_threshold_quantile_value;
341 double group_sparse_active_threshold_used;
342 double group_sparse_objective_initial, group_sparse_objective_final;
343 double group_sparse_fractional_improvement_final;
344 double group_sparse_debiased_objective_final;
345 double group_sparse_debiased_fractional_improvement_final;
346 double group_sparse_refit_gram_condition_number;
347 double group_sparse_refit_relative_ridge_beta;
348 double group_sparse_refit_residual_l2_pre, group_sparse_refit_residual_l2_post;
349 double group_sparse_refit_maximum_amplitude_pre;
350 double group_sparse_refit_maximum_amplitude_post;
351 int group_sparse_max_iterations, group_sparse_iterations;
352 int group_sparse_active_groups;
353 bool group_sparse_converged, group_sparse_refit_condition_guard_applied;
354 bool group_sparse_refit_fallback_to_pre_debias;
355 std::string group_sparse_refit_fallback_reason;
357 void initialize_inverse_operator();
358 void invalidate_processing_state();
359 void ensure_inverse_operator_size(
const int data_npts,
360 const int wavelet_npts,
361 const int noise_npts);
362 int actual_inverse_operator_size()
const;
363 double compute_ns_peak_threshold();
365 void update_residual_matrix(
const ThreeCSpike &spk);
366 void update_lag_weights(
const int col,
const double candidate_amplitude);