MsPASS C++ API  2.4.1.dev4+g92330b7a
Defines the C++ API for MsPASS
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
mspass::seismic::Ensemble< Tdata > Class Template Reference

Metadata-bearing container for a collection of seismic data objects. More...

#include <Ensemble.h>

Inheritance diagram for mspass::seismic::Ensemble< Tdata >:
Inheritance graph
[legend]
Collaboration diagram for mspass::seismic::Ensemble< Tdata >:
Collaboration graph
[legend]

Public Member Functions

 Ensemble ()
 
 Ensemble (const size_t n)
 Reserve space but build empty ensemble.
 
 Ensemble (const mspass::utility::Metadata &md, const size_t n)
 
 Ensemble (const Ensemble &parent)
 
Ensembleoperator= (const Ensemble &parent)
 
Tdataoperator[] (const size_t n) const
 Indexing operator.
 
void update_metadata (const mspass::utility::Metadata &newmd)
 updates ensemble header (Metadata).
 
void sync_metadata ()
 copy ensemble metadata to all members.
 
void sync_metadata (std::vector< std::string > exclude)
 copy ensemble metadata to all members except for the ones excluded.
 

Public Attributes

std::vector< Tdatamember
 Container holding data objects.
 

Additional Inherited Members

Detailed Description

template<typename Tdata>
class mspass::seismic::Ensemble< Tdata >

Metadata-bearing container for a collection of seismic data objects.

The template is used for scalar and three-component ensembles whose members share common Metadata stored on the ensemble header.

Constructor & Destructor Documentation

◆ Ensemble() [1/4]

template<typename Tdata >
mspass::seismic::Ensemble< Tdata >::Ensemble ( )
inline

Default constructor.

27{};

◆ Ensemble() [2/4]

template<typename Tdata >
mspass::seismic::Ensemble< Tdata >::Ensemble ( const size_t  n)
inline

Reserve space but build empty ensemble.

Often we know what the size of an ensemble is before we start building it. This constructor reserve space but marks all members dead.

Parameters
nexpected number of members.
36{ member.reserve(n); };
std::vector< Tdata > member
Container holding data objects.
Definition Ensemble.h:25

References mspass::seismic::Ensemble< Tdata >::member.

◆ Ensemble() [3/4]

template<typename Tdata >
mspass::seismic::Ensemble< Tdata >::Ensemble ( const mspass::utility::Metadata md,
const size_t  n 
)
inline

Partial constructor to clone metadata and set aside n slots but no data

40 member.reserve(n);
41 };
Type-safe metadata container used throughout MsPASS.
Definition Metadata.h:101
std::map< std::string, boost::any > md
Definition Metadata.h:473

References mspass::seismic::Ensemble< Tdata >::member.

◆ Ensemble() [4/4]

template<typename Tdata >
mspass::seismic::Ensemble< Tdata >::Ensemble ( const Ensemble< Tdata > &  parent)
inline

Standard copy constructor.

45 dynamic_cast<const mspass::utility::Metadata &>(parent)),
46 member(parent.member) {};
T get(const std::string key) const
Definition Metadata.h:477

Member Function Documentation

◆ operator=()

Standard assignment operator.

48 {
49 if (this != (&parent)) {
51 member = parent.member;
52 }
53 return *this;
54 };
Metadata & operator=(const Metadata &mdold)
Definition Metadata.cc:460

References mspass::seismic::Ensemble< Tdata >::member, and mspass::utility::Metadata::operator=().

◆ operator[]()

template<typename Tdata >
Tdata & mspass::seismic::Ensemble< Tdata >::operator[] ( const size_t  n) const
inline

Indexing operator.

This is the indexing operator used to extract an ensemble member with a (simpler) construct like x=e[i] as opposed to x=e.member[i]. The later is possible because we (intionally) make the member Container public, but this operator can be used to write code that follows common guidelines to not make data public. It will be used for the python interface.

Parameters
nis the member to be extracted and returned.
66 {
67 return (this->member[n]);
68 } catch (...) {
69 throw;
70 };

◆ sync_metadata() [1/2]

template<typename Tdata >
void mspass::seismic::Ensemble< Tdata >::sync_metadata ( )
inline

copy ensemble metadata to all members.

An ensemble has global metadata, but each member is required to have a metadata component. This method takes the ensemble metadata and copies it to each of the member objects. The operation will overwrite previous key:value pairs in a member that are also present in the ensemble metadata.

97 {
98 size_t i;
99 for (i = 0; i < this->member.size(); ++i) {
101 (*mdmember) += dynamic_cast<mspass::utility::Metadata &>(*this);
102 }
103 };

◆ sync_metadata() [2/2]

template<typename Tdata >
void mspass::seismic::Ensemble< Tdata >::sync_metadata ( std::vector< std::string >  exclude)
inline

copy ensemble metadata to all members except for the ones excluded.

106 {
108 for (size_t i = 0; i < exclude.size(); i++) {
109 if (sync_md.is_defined(exclude[i])) {
110 sync_md.erase(exclude[i]);
111 }
112 }
113 for (size_t i = 0; i < this->member.size(); ++i) {
115 (*mdmember) += sync_md;
116 }
117 };

References mspass::utility::Metadata::erase(), and mspass::utility::Metadata::is_defined().

◆ update_metadata()

template<typename Tdata >
void mspass::seismic::Ensemble< Tdata >::update_metadata ( const mspass::utility::Metadata newmd)
inline

updates ensemble header (Metadata).

Sometime it is helpful to change a group of header attributes stored in the Metadata component. Rather than do a bunch of puts this uses operator += to update the header. Note this operator uses the property that any existing attributes with the same key as one in the updates set will be replaced with the update.

Parameters
newmdcontains new Metadata to use for updates.
82 {
84 md = dynamic_cast<mspass::utility::Metadata *>(this);
85 (*md) += newmd;
86 } catch (...) {
87 throw;
88 };

References mspass::utility::Metadata::md.

Member Data Documentation

◆ member

template<typename Tdata >
std::vector<Tdata> mspass::seismic::Ensemble< Tdata >::member

Container holding data objects.

An ensemble is defined as a collection of data objects linked by some property that is normally defined by data sharing a comomon data-value pair. The data are stored here in a vector container. We make this vector public because the assumption is the member objects can be large and copying with a getter would be a serious inefficiently.


The documentation for this class was generated from the following file: