MsPASS C++ API  2.4.1.dev4+g92330b7a
Defines the C++ API for MsPASS
Loading...
Searching...
No Matches
CoreSeismogram.h
1#ifndef _MSPASS_CORESEISMOGRAM_H_
2#define _MSPASS_CORESEISMOGRAM_H_
3#include "mspass/seismic/BasicTimeSeries.h"
4#include "mspass/seismic/CoreTimeSeries.h"
5#include "mspass/seismic/SlownessVector.h"
6#include "mspass/utility/Metadata.h"
7#include "mspass/utility/SphericalCoordinate.h"
8#include "mspass/utility/dmatrix.h"
9#include <memory>
10#include <vector>
11// #include "mspass/seismic/Ensemble.h"
12namespace mspass::seismic {
13
14/* A Seismogram is viewed as a special collection of Time Series
15type data that is essentially a special version of a vector time series.
16It is "special" as the vector is 3D with real components. One could produce a
17similar inherited type for an n vector time series object.
18
19The structure of a vector time series allows the data to be stored in a matrix.
20Here we use a lightweight matrix object I call dmatrix. This object is
21contains core concepts that define a seismogram. It can be extended as in
22MsPASS to add functionality or aliased to Seismogram to simplify the naming as
23done, for example, with std::basic_string made equivalent to std::string.
24*/
25
40public:
53
69 CoreSeismogram(const size_t nsamples);
105 CoreSeismogram(const std::vector<mspass::seismic::CoreTimeSeries> &ts,
106 const unsigned int component_to_clone = 0);
143 const bool load_data = true);
149 /* These overload virtual methods in BasicTimeSeries. */
162 void set_dt(const double sample_interval);
184 void set_npts(const size_t npts);
191 void sync_npts();
208 void set_t0(const double t0in);
237 const CoreSeismogram operator+(const CoreSeismogram &other) const;
239 CoreSeismogram &operator*=(const double);
264 const CoreSeismogram operator-(const CoreSeismogram &other) const;
288 std::vector<double> operator[](const int sample) const;
300 std::vector<double> operator[](const double time) const;
302 virtual ~CoreSeismogram() {};
318 void rotate_to_standard();
319 // This overloaded pair do the same thing for a vector
320 // specified as a unit vector nu or as spherical coordinate angles
362
389 void rotate(const double nu[3]);
406 void rotate(const double phi);
415 void transform(const double a[3][3]);
429 const double vp0, const double vs0);
440 mspass::utility::dmatrix result(3, 3);
441 for (int i = 0; i < 3; ++i)
442 for (int j = 0; j < 3; ++j)
443 result(i, j) = tmatrix[i][j];
444 return result;
445 };
474 bool set_transformation_matrix(const double a[3][3]);
486 bool set_transformation_matrix(pybind11::object a);
487
489 bool cardinal() const { return components_are_cardinal; };
491 bool orthogonal() const { return components_are_orthogonal; };
496 double endtime() const noexcept {
497 return (mt0 + mdt * static_cast<double>(u.columns() - 1));
498 };
499
500protected:
520 bool components_are_cardinal; // true if x1=e, x2=n, x3=up
528 double tmatrix[3][3];
529
530private:
531 /* This is used internally when necessary to test if a computed or input
532 matrix is an identity matrix. */
533 bool tmatrix_is_cardinal();
534};
535} // namespace mspass::seismic
536#endif // End guard
Base class for time series objects.
Definition BasicTimeSeries.h:35
size_t npts() const
Definition BasicTimeSeries.h:173
double time(const int i) const
Definition BasicTimeSeries.h:62
double mdt
Definition BasicTimeSeries.h:249
double mt0
Definition BasicTimeSeries.h:253
Vector (three-component) seismogram data object.
Definition CoreSeismogram.h:39
const CoreSeismogram operator+(const CoreSeismogram &other) const
Definition CoreSeismogram.cc:996
std::vector< double > operator[](const int sample) const
Definition CoreSeismogram.cc:1087
bool cardinal() const
Definition CoreSeismogram.h:489
virtual ~CoreSeismogram()
Definition CoreSeismogram.h:302
double tmatrix[3][3]
Definition CoreSeismogram.h:528
bool orthogonal() const
Definition CoreSeismogram.h:491
CoreSeismogram & operator+=(const CoreSeismogram &d)
Summation operator.
Definition CoreSeismogram.cc:915
void set_dt(const double sample_interval)
Set the sample interval.
Definition CoreSeismogram.cc:1007
void sync_npts()
Sync the number of samples attribute with actual data size.
Definition CoreSeismogram.cc:1066
void rotate_to_standard()
Definition CoreSeismogram.cc:381
void set_t0(const double t0in)
Set the data start time.
Definition CoreSeismogram.cc:1023
bool components_are_orthogonal
Definition CoreSeismogram.h:511
bool set_transformation_matrix(const mspass::utility::dmatrix &A)
Define the transformaton matrix.
Definition CoreSeismogram.cc:776
mspass::utility::dmatrix u
Definition CoreSeismogram.h:52
CoreSeismogram()
Definition CoreSeismogram.cc:26
CoreSeismogram & operator=(const CoreSeismogram &)
Definition CoreSeismogram.cc:889
mspass::utility::dmatrix get_transformation_matrix() const
Definition CoreSeismogram.h:439
void rotate(mspass::utility::SphericalCoordinate &sc)
Definition CoreSeismogram.cc:525
const CoreSeismogram operator-(const CoreSeismogram &other) const
Definition CoreSeismogram.cc:1002
CoreSeismogram & operator*=(const double)
Definition CoreSeismogram.cc:904
void free_surface_transformation(const mspass::seismic::SlownessVector u, const double vp0, const double vs0)
Definition CoreSeismogram.cc:707
double endtime() const noexcept
Definition CoreSeismogram.h:496
void set_npts(const size_t npts)
Set the number of samples attribute for data.
Definition CoreSeismogram.cc:1040
void transform(const double a[3][3])
Definition CoreSeismogram.cc:654
CoreSeismogram & operator-=(const CoreSeismogram &d)
Subtraction operator.
Definition CoreSeismogram.cc:956
bool components_are_cardinal
Definition CoreSeismogram.h:520
Slowness vector object.
Definition SlownessVector.h:16
Type-safe metadata container used throughout MsPASS.
Definition Metadata.h:101
std::map< std::string, boost::any > md
Definition Metadata.h:473
Lightweight, simple matrix object.
Definition dmatrix.h:104
size_t columns() const
Definition dmatrix.cc:216
Define metadata keys.
Definition BasicSpectrum.h:6
Encapsulates spherical coordinates in a data structure.
Definition SphericalCoordinate.h:15