MsPASS C++ API  2.4.3.dev1+g61b06b96
Defines the C++ API for MsPASS
Loading...
Searching...
No Matches
FrequencyDomainGIDDecon.h
1#ifndef __FREQUENCY_DOMAIN_GID_DECON__
2#define __FREQUENCY_DOMAIN_GID_DECON__
3#include "mspass/algorithms/TimeWindow.h"
4#include "mspass/algorithms/deconvolution/CNRDeconEngine.h"
5#include "mspass/algorithms/deconvolution/FFTDeconOperator.h"
6#include "mspass/algorithms/deconvolution/ScalarDecon.h"
7#include "mspass/algorithms/deconvolution/ShapingWavelet.h"
8#include "mspass/algorithms/deconvolution/ThreeCSpike.h"
9#include "mspass/seismic/CoreSeismogram.h"
10#include "mspass/seismic/CoreTimeSeries.h"
11#include "mspass/seismic/PowerSpectrum.h"
12#include "mspass/seismic/TimeSeries.h"
13#include "mspass/utility/AntelopePf.h"
14#include "mspass/utility/Metadata.h"
15#include "mspass/utility/dmatrix.h"
16#include <list>
17#include <memory>
18#include <string>
19#include <vector>
20
21namespace mspass::algorithms::deconvolution {
32public:
43 FrequencyDomainGIDDecon &operator=(const FrequencyDomainGIDDecon &parent) =
44 delete;
90 int loadnoise(const mspass::seismic::TimeSeries &noise);
105 int loadnoise(const mspass::seismic::PowerSpectrum &noise_spectrum);
111 double deconvolution_window_start() const { return this->fftwin.start; };
113 double deconvolution_window_end() const { return this->fftwin.end; };
115 double wavelet_window_start() const { return this->waveletwin.start; };
117 double wavelet_window_end() const { return this->waveletwin.end; };
119 double output_window_start() const { return this->outputwin.start; };
121 double output_window_end() const { return this->outputwin.end; };
123 double noise_window_start() const { return this->nwin.start; };
125 double noise_window_end() const { return this->nwin.end; };
127 std::string configuration_pf_text() const { return this->config_pf_text; };
130 return this->leaf_parameters_changed;
131 };
134 return this->changed_leaf_metadata;
135 };
138 return this->external_wavelet_loaded;
139 };
141 bool external_noise_is_loaded() const { return this->external_noise_loaded; };
144 return this->external_noise_spectrum_loaded;
145 };
148 if (!this->external_wavelet_loaded)
150 return this->external_wavelet;
151 };
154 if (!this->external_noise_loaded)
156 return this->external_noise;
157 };
160 if (!this->external_noise_spectrum_loaded)
162 return this->external_noise_spectrum;
163 };
182 void process();
196 std::vector<double> lag_weight_vector() const;
209
210private:
211 mspass::seismic::CoreSeismogram d_all, d_decon, r, n;
212 mspass::algorithms::TimeWindow dwin, outputwin, nwin, fftwin, waveletwin;
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;
217 double target_dt;
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;
227 mspass::seismic::TimeSeries current_wavelet;
228 mspass::seismic::TimeSeries external_wavelet;
229 mspass::seismic::TimeSeries external_noise;
230 mspass::seismic::PowerSpectrum external_noise_spectrum;
231 bool external_wavelet_loaded, external_noise_loaded,
232 external_noise_spectrum_loaded, external_wavelet_allowed;
233 bool processed;
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;
238 mspass::utility::Metadata changed_leaf_metadata;
239 mspass::utility::Metadata leaf_operator_metadata;
240 std::vector<double> actual_o_fir;
241 /* Scalar leaves expose a normalized actual_output, while their process
242 * result retains the physical inverse gain. These values record the raw
243 * source-through-inverse zero-lag gain and the reciprocal applied to every
244 * inverse-domain quantity used by GID. */
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;
303 /* Compatibility counters for legacy pre-trial candidate scans. */
304 int legacy_eq15_candidates_tested, legacy_eq15_candidates_rejected;
305 /* Counters for the actual post-acceptance Eq.(15) state comparison. */
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;
319 /* Audit post-refit terminal scans and any continuation they unlock. */
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;
324 bool gid_converged;
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;
356
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();
364 void rescale_spike(ThreeCSpike &spk);
365 void update_residual_matrix(const ThreeCSpike &spk);
366 void update_lag_weights(const int col, const double candidate_amplitude);
367};
368} // namespace mspass::algorithms::deconvolution
369#endif
Defines a time window.
Definition TimeWindow.h:12
double start
Definition TimeWindow.h:17
double end
Definition TimeWindow.h:21
Frequency-domain generalized iterative deconvolution.
Definition FrequencyDomainGIDDecon.h:31
mspass::seismic::CoreSeismogram getresult()
Return the shaped deconvolution result.
Definition FrequencyDomainGIDDecon.cc:2037
void process()
Run the configured sparse GID iteration.
Definition FrequencyDomainGIDDecon.cc:1166
bool external_wavelet_is_loaded() const
Definition FrequencyDomainGIDDecon.h:137
bool external_noise_is_loaded() const
Definition FrequencyDomainGIDDecon.h:141
mspass::utility::Metadata changed_leaf_parameters() const
Definition FrequencyDomainGIDDecon.h:133
mspass::seismic::TimeSeries actual_output()
Definition FrequencyDomainGIDDecon.cc:972
int load(const mspass::seismic::CoreSeismogram &d, mspass::algorithms::TimeWindow dwin)
Load the three-component signal data used for deconvolution.
Definition FrequencyDomainGIDDecon.cc:526
void clear_external_wavelet()
Definition FrequencyDomainGIDDecon.cc:718
mspass::seismic::CoreTimeSeries inverse_wavelet()
Definition FrequencyDomainGIDDecon.cc:982
int loadnoise(const mspass::seismic::CoreSeismogram &d, mspass::algorithms::TimeWindow nwin)
Load the residual-domain noise window from a seismogram.
Definition FrequencyDomainGIDDecon.cc:552
double noise_window_end() const
Definition FrequencyDomainGIDDecon.h:125
double output_window_start() const
Definition FrequencyDomainGIDDecon.h:119
double wavelet_window_end() const
Definition FrequencyDomainGIDDecon.h:117
bool external_noise_spectrum_is_loaded() const
Definition FrequencyDomainGIDDecon.h:143
double output_window_end() const
Definition FrequencyDomainGIDDecon.h:121
double wavelet_window_start() const
Definition FrequencyDomainGIDDecon.h:115
std::string configuration_pf_text() const
Definition FrequencyDomainGIDDecon.h:127
bool leaf_parameters_have_changed() const
Definition FrequencyDomainGIDDecon.h:129
void changeparameter(const mspass::utility::Metadata &md)
Update operator parameters from a Metadata container.
Definition FrequencyDomainGIDDecon.cc:484
mspass::seismic::TimeSeries ideal_output()
Definition FrequencyDomainGIDDecon.cc:968
mspass::seismic::CoreSeismogram sparse_output()
Return the unshaped sparse spike train.
Definition FrequencyDomainGIDDecon.cc:2009
double noise_window_start() const
Definition FrequencyDomainGIDDecon.h:123
std::vector< double > lag_weight_vector() const
Definition FrequencyDomainGIDDecon.cc:2029
void clear_external_noise()
Definition FrequencyDomainGIDDecon.cc:723
mspass::seismic::TimeSeries loaded_external_noise() const
Definition FrequencyDomainGIDDecon.h:153
mspass::utility::Metadata QCMetrics()
Return appropriate quality measures.
Definition FrequencyDomainGIDDecon.cc:2048
mspass::seismic::PowerSpectrum loaded_external_noise_spectrum() const
Definition FrequencyDomainGIDDecon.h:159
double deconvolution_window_end() const
Definition FrequencyDomainGIDDecon.h:113
mspass::seismic::TimeSeries loaded_external_wavelet() const
Definition FrequencyDomainGIDDecon.h:147
double deconvolution_window_start() const
Definition FrequencyDomainGIDDecon.h:111
int loadwavelet(const mspass::seismic::TimeSeries &wavelet)
Load an externally supplied source wavelet.
Definition FrequencyDomainGIDDecon.cc:578
Base class decon operator for single station 3C decon (receiver functions).
Definition ScalarDecon.h:31
std::vector< double > wavelet
Source-wavelet estimate used by concrete scalar methods.
Definition ScalarDecon.h:144
Sparse three-component spike used by iterative deconvolution.
Definition ThreeCSpike.h:16
Vector (three-component) seismogram data object.
Definition CoreSeismogram.h:39
Scalar time series data object.
Definition CoreTimeSeries.h:17
Definition PowerSpectrum.h:11
Implemntation of TimeSeries for MsPASS.
Definition TimeSeries.h:14
C++ object version of a parameter file.
Definition AntelopePf.h:61
Type-safe metadata container used throughout MsPASS.
Definition Metadata.h:101