111 return this->leaf_parameters_changed;
115 return this->changed_leaf_metadata;
119 return this->external_wavelet_loaded;
125 return this->external_noise_spectrum_loaded;
129 if (!this->external_wavelet_loaded)
131 return this->external_wavelet;
135 if (!this->external_noise_loaded)
137 return this->external_noise;
141 if (!this->external_noise_spectrum_loaded)
143 return this->external_noise_spectrum;
194 int inverse_operator_nfft;
195 int gid_noise_samples_loaded, gid_noise_samples_used;
196 bool gid_noise_truncated;
197 std::string config_pf_text;
205 std::list<ThreeCSpike> spikes;
212 std::vector<double> lag_weights;
215 std::vector<double> wtf;
220 std::unique_ptr<ScalarDecon> preprocessor;
221 std::unique_ptr<CNRDeconEngine> cnrprocessor;
226 std::vector<std::vector<double>> ns_noise_components;
227 bool external_wavelet_loaded, external_noise_loaded,
228 external_noise_spectrum_loaded, external_wavelet_allowed;
230 bool residual_noise_from_external;
231 bool leaf_parameters_changed;
232 int gid_analysis_samples, gid_wavelet_samples, gid_alignment_offset_samples;
233 double gid_analysis_t0, gid_wavelet_t0;
241 double gid_leaf_raw_zero_lag_gain;
242 double gid_inverse_domain_amplitude_scale;
254 std::vector<double> actual_o_fir;
256 IterDeconType decon_type;
259 void invalidate_processing_state();
260 void ensure_inverse_operator_size(
const int data_npts,
261 const int wavelet_npts,
262 const int noise_npts);
263 int actual_inverse_operator_size()
const;
276 void update_lag_weights(
int col,
const double candidate_amplitude);
282 double compute_resid_linf_floor(
286 bool has_not_converged();
292 double lw_linf_initial, lw_linf_prev;
293 double lw_l2_initial, lw_l2_prev;
294 double resid_linf_initial, resid_linf_prev;
295 double resid_l2_initial, resid_l2_prev;
297 int iter_count, iter_max;
300 double lw_linf_floor, lw_l2_floor;
303 double resid_linf_prob, resid_linf_floor;
305 double ns_peak_sigma_threshold, ns_peak_probability_threshold;
306 double ns_residual_noise_ratio_floor, ns_peak_threshold;
307 double ns_last_peak_significance, ns_noise_l2, ns_noise_amplitude_rms;
308 double ns_noise_component_sigma_rms, ns_noise_component_sigma_rms_robust;
309 double ns_noise_component_rms_aggregate;
310 bool ns_noise_component_sigma_rms_fallback_used;
311 double ns_residual_rms_initial, ns_residual_rms_final;
312 double ns_peak_threshold_empirical, ns_peak_threshold_sigma;
313 double ns_noise_amplitude_robust, ns_last_candidate_amplitude;
314 int ns_noise_samples_at_or_above_peak_threshold;
315 int ns_noise_amplitude_sample_count;
316 int ns_initial_stationary_null_search_lag_count;
317 double ns_initial_stationary_null_expected_noise_exceedances;
318 int ns_last_selected_candidate_lag;
319 double ns_last_selected_candidate_lag_weight;
320 double ns_last_selected_candidate_weighted_amplitude;
321 double ns_max_raw_candidate_amplitude, ns_max_raw_candidate_significance;
322 int ns_max_raw_candidate_lag;
323 bool ns_last_scan_raw_significant_candidate_remaining;
324 double ns_final_scan_max_raw_candidate_amplitude,
325 ns_final_scan_max_raw_candidate_significance;
326 int ns_final_scan_max_raw_candidate_lag;
327 bool ns_final_scan_raw_significant_candidate_remaining;
328 double ns_final_scan_existing_support_max_raw_amplitude,
329 ns_final_scan_existing_support_max_raw_significance;
330 int ns_final_scan_existing_support_max_raw_lag;
331 int ns_final_scan_significant_candidate_count;
332 int ns_final_scan_best_trial_lag;
333 double ns_final_scan_best_trial_residual_l2,
334 ns_final_scan_best_trial_fractional_improvement;
335 int ns_final_scan_decision_candidate_lag,
336 ns_final_scan_global_acceptable_candidate_count;
337 double ns_final_scan_decision_trial_residual_l2,
338 ns_final_scan_decision_trial_fractional_improvement;
339 std::string ns_final_scan_decision;
340 bool ns_final_scan_acceptable_candidate_remaining;
341 std::vector<double> ns_noise_component_rms;
342 std::vector<int> ns_candidate_lag_history, ns_candidate_accepted_history;
343 std::vector<double> ns_candidate_lag_time_history,
344 ns_candidate_amplitude_history,
345 ns_candidate_threshold_history, ns_candidate_significance_history;
346 std::vector<double> ns_candidate_post_residual_rms_ratio_history;
347 std::vector<double> ns_candidate_residual_l2_before_history,
348 ns_candidate_trial_residual_l2_history,
349 ns_candidate_post_refit_residual_l2_history,
350 ns_candidate_fractional_improvement_history,
351 ns_candidate_state_fractional_improvement_history;
352 std::vector<int> ns_candidate_periodic_refit_applied_history,
353 ns_candidate_final_refit_applied_history,
354 ns_candidate_trial_evaluated_history,
355 ns_candidate_metric_available_history;
356 std::vector<std::string> ns_candidate_stop_history;
358 int legacy_eq15_candidates_tested, legacy_eq15_candidates_rejected;
360 int legacy_eq15_post_acceptance_state_tests,
361 legacy_eq15_post_acceptance_floor_stops;
362 int legacy_eq15_candidates_below_floor, legacy_eq15_candidates_non_decreasing,
363 legacy_eq15_candidates_nonfinite,
364 legacy_eq15_rejected_lag_samples_truncated,
365 legacy_eq15_rejected_iteration_samples_truncated;
366 double legacy_eq15_last_trial_fractional_improvement;
367 std::string legacy_eq15_stop_detail;
368 std::vector<double> legacy_eq15_rejected_lag_times;
369 std::vector<int> legacy_eq15_rejected_candidates_per_iteration;
370 int ns_max_spikes, ns_refit_interval;
372 int ns_refit_epochs, ns_refit_resume_count;
373 double ns_ridge_beta, ns_fractional_improvement_final,
374 ns_fractional_improvement_state_final;
375 bool ns_use_empirical_noise_threshold, ns_converged;
376 bool ns_final_refit_applied;
377 std::string ns_stop_reason, ns_provisional_stop_reason_before_final_refit;
379 std::string gid_stop_reason;
380 std::string lag_weight_penalty_function;
381 double lag_weight_penalty_scale_factor;
382 int lag_weight_function_width;
383 std::vector<double> adaptive_penalty_memory;
384 std::vector<double> adaptive_penalty_retention;
385 double adaptive_penalty_last_confidence;
386 double adaptive_penalty_last_immediate_strength;
387 double adaptive_penalty_last_specificity;
388 double adaptive_penalty_last_decay_factor;
389 double adaptive_penalty_noise_amplitude;
390 double adaptive_penalty_memory_linf;
391 double adaptive_penalty_memory_l2;
392 double group_sparse_lambda, group_sparse_lambda_scale;
393 double group_sparse_lambda_used, group_sparse_tolerance;
394 double group_sparse_active_threshold, group_sparse_active_threshold_scale;
395 double group_sparse_active_threshold_quantile;
396 double group_sparse_active_threshold_quantile_value;
397 double group_sparse_active_threshold_used;
398 double group_sparse_objective_initial, group_sparse_objective_final;
399 double group_sparse_fractional_improvement_final;
400 double group_sparse_debiased_objective_final;
401 double group_sparse_debiased_fractional_improvement_final;
402 double group_sparse_refit_gram_condition_number;
403 double group_sparse_refit_relative_ridge_beta;
404 double group_sparse_refit_residual_l2_pre, group_sparse_refit_residual_l2_post;
405 double group_sparse_refit_maximum_amplitude_pre;
406 double group_sparse_refit_maximum_amplitude_post;
407 int group_sparse_max_iterations, group_sparse_iterations;
408 int group_sparse_active_groups;
409 bool group_sparse_converged, group_sparse_refit_condition_guard_applied;
410 bool group_sparse_refit_fallback_to_pre_debias;
411 std::string group_sparse_refit_fallback_reason;