GSE++ library: reading and writing GSE waveforms
gsexx_write_example.cc
Go to the documentation of this file.
1 
33 #define GSEXX_WRITE_EXAMPLE_VERSION \
34  "GSEXX_WRITE_EXAMPLE V1.0 Example for writing GSE data"
35 #define GSEXX_WRITE_EXAMPLE_CVSID \
36  "$Id$"
37 
38 #include<string>
39 #include<fstream>
40 #include<iostream>
41 #include<gsexx.h>
42 
43 using std::cout;
44 using std::cerr;
45 using std::endl;
46 
47 // name of example data file
48 const char* examplefile="example.gse";
49 
50 int main(int iargc, char* argv[])
51 {
52  cout << GSEXX_WRITE_EXAMPLE_VERSION << endl;
53  cout << GSEXX_WRITE_EXAMPLE_CVSID << endl;
54  cout << endl;
55  cout << "This program provides an example of basic writing to" << endl
56  << "GSE data files. The program will write two traces" << endl
57  << "of CM6 encoded data to a file called '"
58  << examplefile << "'." << endl;
59  cout << endl;
60 
61  // open output file
62  std::ofstream os(examplefile);
63 
64  // write first time series
65  {
66  // number of samples to be written
67  const int nsamples=2000;
68 
69  // prepare WID2 line
70  GSE2::waveform::TWID2 wid2line;
71  wid2line.Fyear=2006;
72  wid2line.Fmonth=1;
73  wid2line.Fday=25;
74  wid2line.Fhour=10;
75  wid2line.Fminute=30;
76  wid2line.Fseconds=12.456789;
77  wid2line.Fsamps=nsamples;
78  wid2line.Fsamprate=20.;
79  wid2line.Fstation="BFO";
80  wid2line.Finstype="STS2";
81  wid2line.Fchannel="BHZ";
82  wid2line.Fauxid="any";
83  wid2line.Fvang=0.;
84  wid2line.Fhang=90.;
85  wid2line.Fcalib=1.e5;
86  wid2line.Fcalper=10.;
88 
89  // report WID2 line
90  std::cout << wid2line.line();
91 
92  // write WID2 line to data file
93  os << wid2line.line();
94 
95  // create CM6 encoding data writer for appropriate number of samples
96  GSE2::waveform::TDAT2writeCM6 writer(nsamples);
97 
98  // write data
99  int i=0;
100  while (writer.hot())
101  {
102  // calculate synthetic sample
103  int sample=int(1.e5*std::sin(i*2.*3.141592653*5./(nsamples-35)));
104  // output sample to data file
105  os << writer(sample);
106  i++;
107  }
108  }
109 
110  // write second time series
111  {
112  // number of samples to be written
113  const int nsamples=2300;
114 
115  // prepare WID2 line with the bare minimum of information required
116  GSE2::waveform::TWID2 wid2line;
117  wid2line.Fsamps=nsamples;
118  wid2line.Fsamprate=1.;
120 
121  // report WID2 line
122  std::cout << wid2line.line();
123 
124  // write WID2 line to data file
125  os << wid2line.line();
126 
127  // create CM6 encoding data writer for appropriate number of samples
128  GSE2::waveform::TDAT2writeCM6 writer(nsamples);
129 
130  // write data
131  int i=0;
132  while (writer.hot())
133  {
134  // calculate synthetic sample
135  int sample=int(1.2e5*(std::sin(i*2.*3.141592653*5./(nsamples-35))
136  +std::cos(i*2.*3.141592653*5.5/(nsamples-35))));
137  // output sample to data file
138  os << writer(sample);
139  i++;
140  }
141  }
142 
143  // that's it!
144  cout << "data file is written..." << endl;
145 
146 } // main
147 
148 /* ----- END OF gsexx_write_example.cc ----- */
GSE++ library: read and write GSE waveform data (prototypes).
std::string Finstype
instrument type
Definition: gsexx.h:146
std::string Fchannel
FDSN channel code.
Definition: gsexx.h:139
Derived class for writing CM6 subformat data.
Definition: gsexx.h:394
double Fcalib
calibration factor
Definition: gsexx.h:144
double Fsamprate
sampling rate (Hz)
Definition: gsexx.h:143
int Fhour
hour of time
Definition: gsexx.h:135
#define GSEXX_WRITE_EXAMPLE_VERSION
#define GSEXX_WRITE_EXAMPLE_CVSID
int main(int iargc, char *argv[])
int Fminute
minute of time
Definition: gsexx.h:136
int Fyear
year of date
Definition: gsexx.h:132
int Fmonth
month of date
Definition: gsexx.h:133
A class to hold and manage the WID2-line. This is a struct - because it is a simple collection of fie...
Definition: gsexx.h:111
bool hot() const
return true if not all samples are processed
Definition: gsexx.h:304
const char * examplefile
Esubformat Fsubformat
GSE2 waveform subformat.
Definition: gsexx.h:141
std::string Fauxid
Auxiliary identification code.
Definition: gsexx.h:140
int Fsamps
number of samples
Definition: gsexx.h:142
std::string line() const
write the WID2 line
Definition: gsexx_TWID2.cc:74
int Fday
day of date
Definition: gsexx.h:134
double Fhang
horizontal orientation
Definition: gsexx.h:147
std::string Fstation
Station code.
Definition: gsexx.h:138
double Fcalper
calibration reference period
Definition: gsexx.h:145
double Fvang
veritcal orientation This field is required to obtain millisecond precision
Definition: gsexx.h:148