#include "mute.h" using namespace SEISPP; class TopMute { public: double t0e, t1; TimeReferenceType reftype; TopMute(){t0e=1.0; t1=2.0; reftype=relative;}; TopMute(Pf *pf,string tag); }; void ApplyTopMute(TimeSeries &ts,TopMute& mute); void ApplyTopMute(ThreeComponentSeismogram& ts,TopMute& mute); void ApplyTopMute(TimeSeriesEnsemble& t, TopMute& mute); void ApplyTopMute(ThreeComponentEnsemble &t3c, TopMute& mute);
A TopMute object is an OEP implementation of the concept of a front-end or top mute common in seismic data processing. A mute is essentially a way to place an artificial gap in a time series to remove something that is not wanted. The classic is to remove the direct arrival from seismic reflection data.
The mute defined here has two zones. The front zone is a region that is set to zeros and the second zone is a linear ramp segment. The section of the data from the start to the time t0e (defined in the TopMute object definition) is set to zero. The section between t0e and t1 is the linear ramp segment. Data after time t1 are not altered. In the linear ramp segment a weight is applied to each sample within that zone. The weight scales from 0 to 1.0 using a linear fit between t0e and t1. The normal purpose for this is to smooth the transition from zero values to unaltered data. This is important, for example, to avoid strong step offsets.
The reftype argument is similar to the concept in a BasicTimeSeries(3) object. Normally reftype would be "relative" meaning the times for t0e and t1 are relative to the start time of the data. If set to absolute then the mute will be assumed to be based on an absolute time standard.
This is a simple object with all of its members public. It can thus be constucted manually. The parameter file based constructor, TopMute(Pf *pf,string tag), is provided for convenience. tag is an &Arr label for parameters to describe a top mute object. The tag allows multiple mutes to be defined and stored by different names. Here is an example:
Data_TopMute &Arr{ TimeReferenceType relative Zero_End_Time 1.0 End_Time 2.0 } Stack_TopMute &Arr{ TimeReferenceType relative Zero_End_Time 2.0 End_Time 3.0 }
This could be used to load two different TopMute definitions using two different tags (in this example "Data_TopMute" and "Stack_TopMute").
The overloaded versions of the function ApplyTopMute apply the specified mute to the relevant object. Note the ensemble versions simply call the single object versions in a loop over an iterator.
All the procedures add a gap for the zone that is zeroed at the top of the trace. This allows unambiguous counting of nonzero data in stacks of muted data.
All the procedures silently do nothing if the mute zone is outside the range of the data. The pf-based constructor will throw a metadata_error exception if there is a problem parsing the parameter file.
BasicTimeSeries(3), TimeSeries(3), ThreeComponentSeismogram(3), metadata_error(3), http://geology.indiana.edu/pavlis/software/seispp/html/index.html
If a gap is already present at the head of a trace the gap added by appy_top_mute functions can supercede the original due to the way the set STL container works. For this reason data with front end gaps should be truncated before calling the mute functions.
There probably should be a plain pf constructor that doesn't require the tag, but since everything is public anyone could do this simply with three calls to pfget functions.
Gary L. Pavlis Indiana University pavlis@indiana.edu