MsPASS C++ API  2.4.3.dev1+g61b06b96
Defines the C++ API for MsPASS
Loading...
Searching...
No Matches
GIDDeconUtil.h
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"
11#include <list>
12#include <limits>
13#include <string>
14#include <vector>
15
16namespace mspass::algorithms::deconvolution {
38
46IterDeconType ParseGIDDeconType(const mspass::utility::Metadata &md,
47 const std::string &caller);
49std::string GIDDeconTypeName(const IterDeconType type);
51double GetDoubleDefault(const mspass::utility::Metadata &md,
52 const std::string &key, const double default_value);
57double GetDoubleRequired(const mspass::utility::Metadata &md,
58 const std::string &key);
60int GetIntDefault(const mspass::utility::Metadata &md, const std::string &key,
61 const int default_value);
63int GetIntRequired(const mspass::utility::Metadata &md,
64 const std::string &key);
66long GetLongRequired(const mspass::utility::Metadata &md,
67 const std::string &key);
69bool GetBoolDefault(const mspass::utility::Metadata &md,
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);
93void PutPrefixedMetadata(mspass::utility::Metadata &target,
94 const mspass::utility::Metadata &source,
95 const std::string &prefix);
101std::string AntelopePfToText(const mspass::utility::AntelopePf &pf,
102 const int indent = 0);
104std::vector<double> ThreeCAmplitudes(const mspass::utility::dmatrix &d);
110double GroupSparseObjective(const mspass::seismic::CoreSeismogram &residual,
111 const std::list<ThreeCSpike> &spikes,
112 const double lambda);
114void ValidateGIDLeafWindow(const mspass::utility::AntelopePf &mdleaf,
115 const mspass::algorithms::TimeWindow &fftwin,
116 const std::string &leaf_name,
117 const std::string &base_error);
123void ValidateGIDLeafOperatorMetadata(
125 const mspass::algorithms::TimeWindow &fftwin, const double target_dt,
126 const std::string &caller, const bool allow_noise_window_keys = false);
133void ValidateExternalTimeSeriesSampleInterval(
134 const mspass::seismic::TimeSeries &d, const double target_dt,
135 const std::string &caller);
138void ValidateExternalTimeSeriesTimeReference(
140 const mspass::seismic::TimeReferenceType analysis_tref,
141 const std::string &caller);
145 double t0;
146 int npts;
147 int analysis_offset;
148 int wavelet_offset;
149};
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);
161int CheckedGIDWindowSampleCount(const mspass::algorithms::TimeWindow &window,
162 const double dt,
163 const std::string &caller);
167GIDCommonTimeGrid BuildGIDCommonTimeGrid(
168 const mspass::seismic::BasicTimeSeries &analysis,
170 const std::string &caller);
175mspass::algorithms::TimeWindow ClipTimeWindowToSeries(
177 const mspass::algorithms::TimeWindow &requested,
178 const std::string &caller);
180std::vector<double> BuildGIDLagWeightPenaltyFunction(
181 const mspass::utility::Metadata &md, const std::string &caller);
183bool GIDLagWeightPenaltyUsesDynamicKernel(const std::string &penalty_type);
185bool GIDLagWeightPenaltyUsesAdaptiveMemory(const std::string &penalty_type);
188 double confidence = 0.0;
189 double immediate_strength = 0.0;
190 double specificity = 0.0;
191 double decay_factor = 0.0;
192 double memory_linf = 0.0;
193 double memory_l2 = 0.0;
194 double noise_amplitude = 0.0;
196};
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(
217 const mspass::utility::dmatrix &residual,
218 const std::vector<double> &lag_weights, const std::vector<int> &active_lags,
219 const double threshold);
221double EstimateThreeCColumnAmplitudeRMS(
227GIDAdaptivePenaltyMetrics ApplyGIDAdaptiveMemoryPenalty(
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"};
259};
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,
273 SpikeRefitDiagnostics *diagnostics = nullptr,
274 const double condition_limit = std::numeric_limits<double>::infinity(),
275 const double condition_guard_relative_ridge = 0.0);
280GroupSparseDeconResult SolveGroupSparseDecon(
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);
286} // namespace mspass::algorithms::deconvolution
287#endif
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
Type-safe metadata container used throughout MsPASS.
Definition Metadata.h:101
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
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
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
double objective_final
Definition GIDDeconUtil.h:35
double active_threshold_quantile
Definition GIDDeconUtil.h:31