1#ifndef __GID_DECON_UTIL_H__
2#define __GID_DECON_UTIL_H__
3#include "mspass/algorithms/TimeWindow.h"
4#include "mspass/algorithms/deconvolution/ThreeCSpike.h"
5#include "mspass/seismic/CoreSeismogram.h"
6#include "mspass/seismic/CoreTimeSeries.h"
7#include "mspass/seismic/TimeSeries.h"
8#include "mspass/utility/AntelopePf.h"
9#include "mspass/utility/Metadata.h"
10#include "mspass/utility/dmatrix.h"
16namespace mspass::algorithms::deconvolution {
47 const std::string &caller);
49std::string GIDDeconTypeName(
const IterDeconType type);
52 const std::string &key,
const double default_value);
58 const std::string &key);
61 const int default_value);
64 const std::string &key);
67 const std::string &key);
70 const std::string &key,
const bool default_value);
72void ValidateProbability(
const double p,
const std::string &key,
73 const std::string &caller);
75void ValidatePositive(
const double x,
const std::string &key,
76 const std::string &caller);
78void ValidateNonnegative(
const double x,
const std::string &key,
79 const std::string &caller);
81void ValidatePositiveInteger(
const int x,
const std::string &key,
82 const std::string &caller);
87void ValidateThreeComponentIndex(
const int component,
const std::string &key,
88 const std::string &caller);
95 const std::string &prefix);
102 const int indent = 0);
111 const std::list<ThreeCSpike> &spikes,
112 const double lambda);
116 const std::string &leaf_name,
117 const std::string &base_error);
123void ValidateGIDLeafOperatorMetadata(
126 const std::string &caller,
const bool allow_noise_window_keys =
false);
133void ValidateExternalTimeSeriesSampleInterval(
135 const std::string &caller);
138void ValidateExternalTimeSeriesTimeReference(
141 const std::string &caller);
153int CheckedGIDLinearConvolutionNFFT(
const int data_npts,
154 const int wavelet_npts,
155 const int noise_npts,
156 const bool include_noise,
157 const std::string &caller);
163 const std::string &caller);
170 const std::string &caller);
178 const std::string &caller);
180std::vector<double> BuildGIDLagWeightPenaltyFunction(
183bool GIDLagWeightPenaltyUsesDynamicKernel(
const std::string &penalty_type);
185bool GIDLagWeightPenaltyUsesAdaptiveMemory(
const std::string &penalty_type);
198std::vector<double> BuildGIDLagWeightPenaltyFunctionFromKernel(
199 const std::string &penalty_type,
const double penalty_scale,
200 const std::vector<double> &kernel,
const int zero_lag_sample,
201 const std::string &caller);
203void ApplyGIDLagWeightPenalty(std::vector<double> &lag_weights,
204 const std::vector<double> &penalty,
205 const int center_col);
209int SelectNoiseSignificantGIDCandidateIndex(
210 const std::vector<double> &raw_amplitudes,
211 const std::vector<double> &lag_weights,
const double threshold);
216std::vector<int> OrderedNoiseSignificantGIDCandidates(
218 const std::vector<double> &lag_weights,
const std::vector<int> &active_lags,
219 const double threshold);
221double EstimateThreeCColumnAmplitudeRMS(
228 std::vector<double> &lag_weights, std::vector<double> &memory,
229 std::vector<double> &retention,
const std::vector<double> &kernel,
230 const int zero_lag_sample,
const int center_col,
231 const double penalty_scale,
const double candidate_amplitude,
232 const double noise_amplitude,
const std::string &caller);
234double FIRSelfOverlap(
const std::vector<double> &fir,
const int col0_i,
235 const int col0_j,
const int ncols);
237double FIRDataOverlap(
const std::vector<double> &fir,
239 const int component,
const int col0);
245std::vector<double> SolveDenseSystem(
const std::vector<std::vector<double>> &a,
246 const std::vector<double> &b,
247 const std::string &caller);
250 double gram_condition_number{0.0};
251 double relative_ridge_beta{0.0};
252 double residual_l2_pre{0.0};
253 double residual_l2_post{0.0};
254 double maximum_amplitude_pre{0.0};
255 double maximum_amplitude_post{0.0};
256 bool condition_guard_applied{
false};
257 bool fallback_to_pre_debias{
false};
258 std::string fallback_reason{
"not_requested"};
268void RefitSpikeAmplitudes(
269 std::list<ThreeCSpike> &spikes,
271 const std::vector<double> &actual_o_fir,
const int actual_o_0,
272 const double ridge_beta = 1.0e-10,
274 const double condition_limit = std::numeric_limits<double>::infinity(),
275 const double condition_guard_relative_ridge = 0.0);
282 const std::vector<double> &actual_o_fir,
const int actual_o_0,
283 const double lambda,
const int max_iterations,
const double tolerance,
284 const double active_threshold,
const double active_threshold_scale,
285 const double active_threshold_quantile,
const std::string &caller);
Defines a time window.
Definition TimeWindow.h:12
Base class for time series objects.
Definition BasicTimeSeries.h:35
Vector (three-component) seismogram data object.
Definition CoreSeismogram.h:39
Scalar time series data object.
Definition CoreTimeSeries.h:17
Implemntation of TimeSeries for MsPASS.
Definition TimeSeries.h:14
C++ object version of a parameter file.
Definition AntelopePf.h:61
Lightweight, simple matrix object.
Definition dmatrix.h:105
TimeReferenceType
Type of time standard for time series data.
Definition BasicTimeSeries.h:14
Diagnostics from adaptive lag-penalty memory updates.
Definition GIDDeconUtil.h:187
double immediate_strength
Definition GIDDeconUtil.h:189
double memory_l2
Definition GIDDeconUtil.h:193
double memory_linf
Definition GIDDeconUtil.h:192
double decay_factor
Definition GIDDeconUtil.h:191
double noise_amplitude
Definition GIDDeconUtil.h:194
double confidence
Definition GIDDeconUtil.h:188
double specificity
Definition GIDDeconUtil.h:190
int effective_width
Definition GIDDeconUtil.h:195
Definition GIDDeconUtil.h:144
Result bundle returned by group-sparse GID deconvolution.
Definition GIDDeconUtil.h:22
double fractional_improvement_final
Definition GIDDeconUtil.h:36
double active_threshold_floor
Definition GIDDeconUtil.h:29
double active_threshold_used
Definition GIDDeconUtil.h:33
double objective_initial
Definition GIDDeconUtil.h:34
int active_groups
Definition GIDDeconUtil.h:26
double lambda
Definition GIDDeconUtil.h:28
double active_threshold_quantile_value
Definition GIDDeconUtil.h:32
std::list< ThreeCSpike > spikes
Definition GIDDeconUtil.h:23
double active_threshold_scale
Definition GIDDeconUtil.h:30
mspass::seismic::CoreSeismogram residual
Definition GIDDeconUtil.h:24
bool converged
Definition GIDDeconUtil.h:27
double objective_final
Definition GIDDeconUtil.h:35
double active_threshold_quantile
Definition GIDDeconUtil.h:31
int iterations
Definition GIDDeconUtil.h:25
Definition GIDDeconUtil.h:249