MsPASS C++ API  2.4.1.dev4+g92330b7a
Defines the C++ API for MsPASS
Loading...
Searching...
No Matches
MultiTaperSpecDivDecon.h
1#ifndef __PAVLIS_MULTITAPER_DECON_H__
2#define __PAVLIS_MULTITAPER_DECON_H__
3#include "mspass/algorithms/deconvolution/ComplexArray.h"
4#include "mspass/algorithms/deconvolution/FFTDeconOperator.h"
5#include "mspass/algorithms/deconvolution/ScalarDecon.h"
6#include "mspass/algorithms/deconvolution/ShapingWavelet.h"
7#include "mspass/seismic/CoreTimeSeries.h"
8#include "mspass/utility/Metadata.h"
9#include "mspass/utility/dmatrix.h"
10#include <boost/archive/text_iarchive.hpp>
11#include <boost/archive/text_oarchive.hpp>
12#include <boost/serialization/base_object.hpp>
13#include <boost/serialization/vector.hpp>
14#include <vector>
15namespace mspass::algorithms::deconvolution {
24public:
35 const std::vector<double> &noise,
36 const std::vector<double> &wavelet,
37 const std::vector<double> &data);
50 this->read_metadata(md, true);
51 this->result.clear();
52 this->winv = ComplexArray();
53 this->winv_taper.clear();
54 this->ao_fft.clear();
55 this->rfestimates.clear();
56 };
62 int loadnoise(const std::vector<double> &noise);
68 int load(const std::vector<double> &w, const std::vector<double> &d,
69 const std::vector<double> &n);
75 void process();
107 mspass::seismic::CoreTimeSeries inverse_wavelet(const double t0parent = 0.0);
118 std::vector<mspass::seismic::CoreTimeSeries>
119 all_inverse_wavelets(const double t0parent = 0.0);
123 std::vector<mspass::seismic::CoreTimeSeries>
124 all_rfestimates(const double t0parent = 0.0);
128 std::vector<mspass::seismic::CoreTimeSeries>
129 all_actual_outputs(const double t0parent = 0.0);
136 int get_taperlen() { return taperlen; };
142 int get_number_tapers() { return nseq; };
147 int get_number_outputs() { return winv_taper.size(); };
149 double get_time_bandwidth_product() { return nw; };
150
151private:
152 std::vector<double> noise;
153 double nw, damp;
154 int nseq; // number of tapers
155 unsigned int taperlen;
157 /* Frequency-domain representation of the combined inverse. This vector is
158 * retained for compatibility with older APIs that returned per-taper
159 * products. */
160 std::vector<ComplexArray> winv_taper;
161 /* We also cache the actual output fft because the cost is
162 * small compared to need to recompute it when requested.
163 * This is a feature added for the GID method that adds
164 * an inefficiency for straight application */
165 std::vector<ComplexArray> ao_fft;
166 /* Combined RF estimate retained in a vector for API compatibility. */
167 std::vector<ComplexArray> rfestimates;
168 /* Private methods */
169 /* Returns a tapered data in container of ComplexArray objects*/
170 std::vector<ComplexArray> taper_data(const std::vector<double> &signal);
172 int read_metadata(const mspass::utility::Metadata &md, bool refresh);
173 friend boost::serialization::access;
174 template <class Archive>
175 void serialize(Archive &ar, const unsigned int version) {
176 ar &boost::serialization::base_object<ScalarDecon>(*this);
177 ar &boost::serialization::base_object<FFTDeconOperator>(*this);
178 ar & noise;
179 ar & nw;
180 ar & damp;
181 ar & nseq;
182 ar & taperlen;
183 ar & tapers;
184 ar & winv_taper;
185 ar & ao_fft;
186 ar & rfestimates;
187 }
188};
189} // namespace mspass::algorithms::deconvolution
190#endif
Interfacing object to ease conversion between FORTRAN and C++ complex.
Definition ComplexArray.h:41
Object to hold components needed in all fft based decon algorithms.
Definition FFTDeconOperator.h:21
ComplexArray winv
Frequency-domain inverse wavelet coefficients for derived operators.
Definition FFTDeconOperator.h:103
Multitaper power-stabilized spectral-division deconvolution.
Definition MultiTaperSpecDivDecon.h:23
std::vector< mspass::seismic::CoreTimeSeries > all_rfestimates(const double t0parent=0.0)
Definition MultiTaperSpecDivDecon.cc:490
int loadnoise(const std::vector< double > &noise)
Load a section of pre-event noise.
Definition MultiTaperSpecDivDecon.cc:132
int get_taperlen()
Definition MultiTaperSpecDivDecon.h:136
MultiTaperSpecDivDecon()
Definition MultiTaperSpecDivDecon.h:26
mspass::seismic::CoreTimeSeries actual_output()
Return the actual output of the deconvolution operator.
Definition MultiTaperSpecDivDecon.cc:380
mspass::seismic::CoreTimeSeries inverse_wavelet()
Return default FIR representation of the inverse filter.
Definition MultiTaperSpecDivDecon.cc:462
void changeparameter(const mspass::utility::Metadata &md)
Update operator parameters from a Metadata container.
Definition MultiTaperSpecDivDecon.h:49
int load(const std::vector< double > &w, const std::vector< double > &d, const std::vector< double > &n)
Load wavelet, data, and noise vectors.
Definition MultiTaperSpecDivDecon.cc:158
std::vector< mspass::seismic::CoreTimeSeries > all_inverse_wavelets(const double t0parent=0.0)
Definition MultiTaperSpecDivDecon.cc:470
void process()
Compute the combined multitaper spectral-division result.
Definition MultiTaperSpecDivDecon.cc:221
int get_number_outputs()
Definition MultiTaperSpecDivDecon.h:147
mspass::utility::Metadata QCMetrics()
Return appropriate quality measures.
Definition MultiTaperSpecDivDecon.cc:536
double get_time_bandwidth_product()
Definition MultiTaperSpecDivDecon.h:149
int get_number_tapers()
Definition MultiTaperSpecDivDecon.h:142
std::vector< mspass::seismic::CoreTimeSeries > all_actual_outputs(const double t0parent=0.0)
Definition MultiTaperSpecDivDecon.cc:513
Base class decon operator for single station 3C decon (receiver functions).
Definition ScalarDecon.h:30
std::vector< double > result
Deconvolved output vector produced by process.
Definition ScalarDecon.h:144
std::vector< double > data
Data vector to be deconvolved by concrete scalar methods.
Definition ScalarDecon.h:140
std::vector< double > wavelet
Source-wavelet estimate used by concrete scalar methods.
Definition ScalarDecon.h:142
Scalar time series data object.
Definition CoreTimeSeries.h:17
Type-safe metadata container used throughout MsPASS.
Definition Metadata.h:101
Lightweight, simple matrix object.
Definition dmatrix.h:104