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/ScalarDecon.h"
6#include "mspass/algorithms/deconvolution/ShapingWavelet.h"
7#include "mspass/algorithms/deconvolution/ThreeCSpike.h"
8#include "mspass/seismic/CoreSeismogram.h"
9#include "mspass/seismic/CoreTimeSeries.h"
10#include "mspass/seismic/PowerSpectrum.h"
11#include "mspass/seismic/TimeSeries.h"
12#include "mspass/utility/AntelopePf.h"
13#include "mspass/utility/Metadata.h"
14#include "mspass/utility/dmatrix.h"
20namespace mspass::algorithms::deconvolution {
121 return this->leaf_parameters_changed;
125 return this->changed_leaf_metadata;
129 return this->external_wavelet_loaded;
135 return this->external_noise_spectrum_loaded;
139 if (!this->external_wavelet_loaded)
141 return this->external_wavelet;
145 if (!this->external_noise_loaded)
147 return this->external_noise;
151 if (!this->external_noise_spectrum_loaded)
153 return this->external_noise_spectrum;
204 std::string config_pf_text;
206 int ndwin, nnwin, noise_component;
207 int actual_o_0, iter_count, iter_max;
208 double residual_ratio_floor, residual_improvement_floor;
209 double resid_l2_initial, resid_l2_prev, resid_l2_final;
210 double resid_linf_initial, resid_linf_final;
211 double lag_weight_linf_final, lag_weight_l2_final;
212 IterDeconType decon_type;
213 std::unique_ptr<ScalarDecon> preprocessor;
214 std::unique_ptr<CNRDeconEngine> cnrprocessor;
219 bool external_wavelet_loaded, external_noise_loaded,
220 external_noise_spectrum_loaded, external_wavelet_allowed;
222 bool residual_noise_from_external;
223 bool leaf_parameters_changed;
225 std::vector<double> actual_o_fir;
226 std::vector<double> lag_weights, lag_weight_penalty;
227 std::vector<double> adaptive_penalty_memory;
228 std::vector<double> adaptive_penalty_retention;
229 std::list<ThreeCSpike> spikes;
230 double ns_peak_sigma_threshold, ns_peak_probability_threshold;
231 double ns_residual_noise_ratio_floor, ns_peak_threshold;
232 double ns_last_peak_significance, ns_noise_l2, ns_noise_amplitude_rms;
233 double ns_fractional_improvement_final, ns_ridge_beta;
234 int ns_max_spikes, ns_refit_interval;
235 bool ns_use_empirical_noise_threshold, ns_converged;
236 std::string ns_stop_reason;
238 std::string gid_stop_reason;
239 std::string lag_weight_penalty_function;
240 double lag_weight_penalty_scale_factor;
241 int lag_weight_function_width;
242 double adaptive_penalty_last_confidence;
243 double adaptive_penalty_last_immediate_strength;
244 double adaptive_penalty_last_specificity;
245 double adaptive_penalty_last_decay_factor;
246 double adaptive_penalty_noise_amplitude;
247 double adaptive_penalty_memory_linf;
248 double adaptive_penalty_memory_l2;
249 double group_sparse_lambda, group_sparse_lambda_scale;
250 double group_sparse_lambda_used, group_sparse_tolerance;
251 double group_sparse_active_threshold, group_sparse_active_threshold_scale;
252 double group_sparse_active_threshold_quantile;
253 double group_sparse_active_threshold_quantile_value;
254 double group_sparse_active_threshold_used;
255 double group_sparse_objective_initial, group_sparse_objective_final;
256 double group_sparse_fractional_improvement_final;
257 double group_sparse_debiased_objective_final;
258 double group_sparse_debiased_fractional_improvement_final;
259 int group_sparse_max_iterations, group_sparse_iterations;
260 int group_sparse_active_groups;
261 bool group_sparse_converged;
263 void initialize_inverse_operator();
264 void invalidate_processing_state();
265 double compute_ns_peak_threshold();
267 void update_residual_matrix(
const ThreeCSpike &spk);
268 void update_lag_weights(
const int col,
const double candidate_amplitude);
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:30
mspass::seismic::CoreSeismogram getresult()
Return the shaped deconvolution result.
Definition FrequencyDomainGIDDecon.cc:1012
void process()
Run the configured sparse GID iteration.
Definition FrequencyDomainGIDDecon.cc:702
bool external_wavelet_is_loaded() const
Definition FrequencyDomainGIDDecon.h:128
bool external_noise_is_loaded() const
Definition FrequencyDomainGIDDecon.h:132
mspass::utility::Metadata changed_leaf_parameters() const
Definition FrequencyDomainGIDDecon.h:124
mspass::seismic::CoreTimeSeries ideal_output()
Definition FrequencyDomainGIDDecon.cc:579
int load(const mspass::seismic::CoreSeismogram &d, mspass::algorithms::TimeWindow dwin)
Load the three-component signal data used for deconvolution.
Definition FrequencyDomainGIDDecon.cc:309
void clear_external_wavelet()
Definition FrequencyDomainGIDDecon.cc:434
mspass::seismic::CoreTimeSeries inverse_wavelet()
Definition FrequencyDomainGIDDecon.cc:593
int loadnoise(const mspass::seismic::CoreSeismogram &d, mspass::algorithms::TimeWindow nwin)
Load the residual-domain noise window from a seismogram.
Definition FrequencyDomainGIDDecon.cc:326
double noise_window_end() const
Definition FrequencyDomainGIDDecon.h:116
bool external_noise_spectrum_is_loaded() const
Definition FrequencyDomainGIDDecon.h:134
std::string configuration_pf_text() const
Definition FrequencyDomainGIDDecon.h:118
bool leaf_parameters_have_changed() const
Definition FrequencyDomainGIDDecon.h:120
void changeparameter(const mspass::utility::Metadata &md)
Update operator parameters from a Metadata container.
Definition FrequencyDomainGIDDecon.cc:295
mspass::seismic::CoreSeismogram sparse_output()
Return the unshaped sparse spike train.
Definition FrequencyDomainGIDDecon.cc:984
double noise_window_start() const
Definition FrequencyDomainGIDDecon.h:114
mspass::seismic::CoreTimeSeries actual_output()
Definition FrequencyDomainGIDDecon.cc:583
std::vector< double > lag_weight_vector() const
Definition FrequencyDomainGIDDecon.cc:1004
void clear_external_noise()
Definition FrequencyDomainGIDDecon.cc:439
mspass::seismic::TimeSeries loaded_external_noise() const
Definition FrequencyDomainGIDDecon.h:144
mspass::utility::Metadata QCMetrics()
Return appropriate quality measures.
Definition FrequencyDomainGIDDecon.cc:1023
mspass::seismic::PowerSpectrum loaded_external_noise_spectrum() const
Definition FrequencyDomainGIDDecon.h:150
double deconvolution_window_end() const
Definition FrequencyDomainGIDDecon.h:112
mspass::seismic::TimeSeries loaded_external_wavelet() const
Definition FrequencyDomainGIDDecon.h:138
double deconvolution_window_start() const
Definition FrequencyDomainGIDDecon.h:110
int loadwavelet(const mspass::seismic::TimeSeries &wavelet)
Load an externally supplied source wavelet.
Definition FrequencyDomainGIDDecon.cc:342
Base class decon operator for single station 3C decon (receiver functions).
Definition ScalarDecon.h:30
std::vector< double > wavelet
Source-wavelet estimate used by concrete scalar methods.
Definition ScalarDecon.h:142
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