MsPASS C++ API  2.4.1.dev4+g92330b7a
Defines the C++ API for MsPASS
Loading...
Searching...
No Matches
PowerSpectrum.h
1#ifndef _POWER_SPECTRUM_H_
2#define _POWER_SPECTRUM_H_
3#include "mspass/seismic/BasicSpectrum.h"
4#include "mspass/utility/ErrorLogger.h"
5#include "mspass/utility/Metadata.h"
6#include "mspass/utility/MsPASSError.h"
7#include <vector>
8namespace mspass::seismic {
12public:
18 std::string spectrum_type;
20 std::vector<double> spectrum;
45 template <class T>
46 PowerSpectrum(const mspass::utility::Metadata &md, const std::vector<T> &d,
47 const double dfin, const std::string nm, const double f0in,
48 const double dtin, const int npts_in);
50 PowerSpectrum(const PowerSpectrum &parent);
67 std::vector<double> amplitude() const;
78 double power(const double f) const;
79
80 double frequency(const int sample_number) const {
81 const std::string base_error("PowerSpectrum::frequency: ");
82 if (sample_number < 0)
84 base_error + "Sample number parameter passed cannot be negative");
85 if (sample_number >= (this->nf()))
87 base_error +
88 "Sample number parameter passed xceeds range of spectrum array");
89 return this->f0() + sample_number * this->df();
90 };
91 std::vector<double> frequencies() const;
92 /* \brief Return number of frequencies in estimate (size of spectrum vector).
93
94 Users should be aware that when zero padding is used the size of the
95 spectrum vector will be larger than half the number of time series samples.*/
96 size_t nf() const { return spectrum.size(); };
98 double Nyquist() const { return 1.0 / (2.0 * this->parent_dt); };
99};
106template <class T>
108 const std::vector<T> &d, const double dfin,
109 const std::string nm, const double f0in,
110 const double dtin, const int npts_in)
111 : BasicSpectrum(dfin, f0in, dtin, npts_in), mspass::utility::Metadata(md),
112 elog() {
113 spectrum_type = nm;
114 spectrum.reserve(d.size());
115 for (size_t k = 0; k < d.size(); ++k)
116 spectrum.push_back(static_cast<double>(d[k]));
117 this->set_live();
118};
119} // namespace mspass::seismic
120#endif
Definition BasicSpectrum.h:19
int sample_number(const double f) const
Definition BasicSpectrum.h:125
void set_live()
Definition BasicSpectrum.h:92
double df() const
Definition BasicSpectrum.h:94
double f0() const
Definition BasicSpectrum.h:99
double parent_dt
Definition BasicSpectrum.h:171
Definition PowerSpectrum.h:11
std::vector< double > frequencies() const
Definition PowerSpectrum.cc:94
double power(const double f) const
power at a given frequency.
Definition PowerSpectrum.cc:74
PowerSpectrum & operator=(const PowerSpectrum &parent)
Definition PowerSpectrum.cc:20
size_t nf() const
Definition PowerSpectrum.h:96
PowerSpectrum()
Definition PowerSpectrum.cc:10
PowerSpectrum & operator+=(const PowerSpectrum &other)
Standard accumulation operator.
Definition PowerSpectrum.cc:30
mspass::utility::ErrorLogger elog
Definition PowerSpectrum.h:26
std::vector< double > spectrum
Definition PowerSpectrum.h:20
std::vector< double > amplitude() const
Compute amplitude spectrum from power spectrum.
Definition PowerSpectrum.cc:67
double frequency(const int sample_number) const
Definition PowerSpectrum.h:80
double Nyquist() const
Definition PowerSpectrum.h:98
std::string spectrum_type
Definition PowerSpectrum.h:18
Container to hold error logs for a data object.
Definition ErrorLogger.h:63
Type-safe metadata container used throughout MsPASS.
Definition Metadata.h:101
std::map< std::string, boost::any > md
Definition Metadata.h:473
Base class for error object thrown by MsPASS library routines.
Definition MsPASSError.h:38
Define metadata keys.
Definition BasicSpectrum.h:6