1#ifndef __TIME_DOMAIN_GID_DECON__
2#define __TIME_DOMAIN_GID_DECON__
3#include "mspass/algorithms/TimeWindow.h"
4#include "mspass/algorithms/deconvolution/ComplexArray.h"
5#include "mspass/algorithms/deconvolution/CNRDeconEngine.h"
6#include "mspass/algorithms/deconvolution/FFTDeconOperator.h"
7#include "mspass/algorithms/deconvolution/ScalarDecon.h"
8#include "mspass/algorithms/deconvolution/ThreeCSpike.h"
9#include "mspass/seismic/CoreTimeSeries.h"
10#include "mspass/seismic/PowerSpectrum.h"
11#include "mspass/seismic/Seismogram.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"
21namespace mspass::algorithms::deconvolution {
103 return this->leaf_parameters_changed;
107 return this->changed_leaf_metadata;
111 return this->external_wavelet_loaded;
117 return this->external_noise_spectrum_loaded;
121 if (!this->external_wavelet_loaded)
123 return this->external_wavelet;
127 if (!this->external_noise_loaded)
129 return this->external_noise;
133 if (!this->external_noise_spectrum_loaded)
135 return this->external_noise_spectrum;
186 std::string config_pf_text;
194 std::list<ThreeCSpike> spikes;
201 std::vector<double> lag_weights;
204 std::vector<double> wtf;
209 std::unique_ptr<ScalarDecon> preprocessor;
210 std::unique_ptr<CNRDeconEngine> cnrprocessor;
215 std::vector<std::vector<double>> ns_noise_components;
216 bool external_wavelet_loaded, external_noise_loaded,
217 external_noise_spectrum_loaded, external_wavelet_allowed;
219 bool residual_noise_from_external;
220 bool leaf_parameters_changed;
233 std::vector<double> actual_o_fir;
235 IterDeconType decon_type;
238 void invalidate_processing_state();
251 void update_lag_weights(
int col,
const double candidate_amplitude);
257 double compute_resid_linf_floor(
261 bool has_not_converged();
267 double lw_linf_initial, lw_linf_prev;
268 double lw_l2_initial, lw_l2_prev;
269 double resid_linf_initial, resid_linf_prev;
270 double resid_l2_initial, resid_l2_prev;
272 int iter_count, iter_max;
275 double lw_linf_floor, lw_l2_floor;
278 double resid_linf_prob, resid_linf_floor;
280 double ns_peak_sigma_threshold, ns_peak_probability_threshold;
281 double ns_residual_noise_ratio_floor, ns_peak_threshold;
282 double ns_last_peak_significance, ns_noise_l2, ns_noise_amplitude_rms;
283 int ns_max_spikes, ns_refit_interval;
284 double ns_ridge_beta, ns_fractional_improvement_final;
285 bool ns_use_empirical_noise_threshold, ns_converged;
286 std::string ns_stop_reason;
288 std::string gid_stop_reason;
289 std::string lag_weight_penalty_function;
290 double lag_weight_penalty_scale_factor;
291 int lag_weight_function_width;
292 std::vector<double> adaptive_penalty_memory;
293 std::vector<double> adaptive_penalty_retention;
294 double adaptive_penalty_last_confidence;
295 double adaptive_penalty_last_immediate_strength;
296 double adaptive_penalty_last_specificity;
297 double adaptive_penalty_last_decay_factor;
298 double adaptive_penalty_noise_amplitude;
299 double adaptive_penalty_memory_linf;
300 double adaptive_penalty_memory_l2;
301 double group_sparse_lambda, group_sparse_lambda_scale;
302 double group_sparse_lambda_used, group_sparse_tolerance;
303 double group_sparse_active_threshold, group_sparse_active_threshold_scale;
304 double group_sparse_active_threshold_quantile;
305 double group_sparse_active_threshold_quantile_value;
306 double group_sparse_active_threshold_used;
307 double group_sparse_objective_initial, group_sparse_objective_final;
308 double group_sparse_fractional_improvement_final;
309 double group_sparse_debiased_objective_final;
310 double group_sparse_debiased_fractional_improvement_final;
311 int group_sparse_max_iterations, group_sparse_iterations;
312 int group_sparse_active_groups;
313 bool group_sparse_converged;
Defines a time window.
Definition TimeWindow.h:12
double start
Definition TimeWindow.h:17
double end
Definition TimeWindow.h:21
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
Three-component generalized iterative deconvolution in time.
Definition TimeDomainGIDDecon.h:45
mspass::utility::Metadata QCMetrics()
Definition TimeDomainGIDDecon.cc:1370
void clear_external_noise()
Definition TimeDomainGIDDecon.cc:543
mspass::seismic::TimeSeries loaded_external_noise() const
Definition TimeDomainGIDDecon.h:126
mspass::seismic::CoreTimeSeries actual_output()
Definition TimeDomainGIDDecon.cc:308
bool external_wavelet_is_loaded() const
Definition TimeDomainGIDDecon.h:110
int loadnoise(const mspass::seismic::CoreSeismogram &d, mspass::algorithms::TimeWindow nwin)
Definition TimeDomainGIDDecon.cc:419
double noise_window_end() const
Definition TimeDomainGIDDecon.h:98
int load(const mspass::seismic::CoreSeismogram &d, mspass::algorithms::TimeWindow dwin)
Definition TimeDomainGIDDecon.cc:394
mspass::seismic::CoreSeismogram getresult()
Definition TimeDomainGIDDecon.cc:1356
bool external_noise_is_loaded() const
Definition TimeDomainGIDDecon.h:114
double noise_window_start() const
Definition TimeDomainGIDDecon.h:96
std::string configuration_pf_text() const
Definition TimeDomainGIDDecon.h:100
bool external_noise_spectrum_is_loaded() const
Definition TimeDomainGIDDecon.h:116
mspass::seismic::CoreTimeSeries inverse_wavelet()
Definition TimeDomainGIDDecon.cc:318
TimeDomainGIDDecon & operator=(const TimeDomainGIDDecon &parent)=delete
double deconvolution_window_start() const
Definition TimeDomainGIDDecon.h:92
mspass::seismic::PowerSpectrum loaded_external_noise_spectrum() const
Definition TimeDomainGIDDecon.h:132
mspass::utility::Metadata changed_leaf_parameters() const
Definition TimeDomainGIDDecon.h:106
mspass::seismic::CoreTimeSeries ideal_output()
Definition TimeDomainGIDDecon.cc:304
~TimeDomainGIDDecon()
Definition TimeDomainGIDDecon.cc:241
void process()
Definition TimeDomainGIDDecon.cc:739
bool leaf_parameters_have_changed() const
Definition TimeDomainGIDDecon.h:102
mspass::seismic::CoreSeismogram sparse_output()
Definition TimeDomainGIDDecon.cc:1314
TimeDomainGIDDecon(const TimeDomainGIDDecon &parent)=delete
mspass::seismic::TimeSeries loaded_external_wavelet() const
Definition TimeDomainGIDDecon.h:120
int loadwavelet(const mspass::seismic::TimeSeries &wavelet)
Definition TimeDomainGIDDecon.cc:450
void changeparameter(const mspass::utility::Metadata &md)
Definition TimeDomainGIDDecon.cc:291
double deconvolution_window_end() const
Definition TimeDomainGIDDecon.h:94
std::vector< double > lag_weight_vector() const
Definition TimeDomainGIDDecon.cc:1349
void clear_external_wavelet()
Definition TimeDomainGIDDecon.cc:538
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