libsacio  1.0.2
Seismic Analysis Code I/O Library
Functions
sac-iris

Compatability routines for fortran style sacio. More...

Functions

void sac_iris::rsac1 (char *kname, float yarray[], int *nlen, float *beg, float *del, int *max_, int *nerr, int kname_s)
 Read an evenly spaced sac file. More...
 
void sac_iris::rsac2 (char *kname, float *yarray, int *nlen, float *xarray, int *max_, int *nerr, int kname_s)
 Read an unevenly spaced sac file. More...
 
void sac_iris::newhdr ()
 Create a new sac header to store in memory. More...
 
void sac_iris::rsach (char *kname, int *nerr, int kname_s)
 Read a sac file header. More...
 
void sac_iris::wsac0 (char *kname, float *xarray, float *yarray, int *nerr, int kname_s)
 Write a sac file. More...
 
void sac_iris::wsac3 (char *kname, float *xarray, float *yarray, int *nerr, int kname_s)
 Write a sac file. More...
 
void sac_iris::wsac1 (char *kname, float *yarray, int *nlen, float *beg, float *del, int *nerr, int kname_s)
 Write an evenly spaced sac file. More...
 
void sac_iris::wsac2 (char *kname, float *yarray, int *nlen, float *xarray, int *nerr, int kname_s)
 Write an unevenly spaced sac file. More...
 
void sac_iris::getrhv (char *kname, double *fvalue, int *nerr, int kname_s)
 Get a floating point header value. More...
 
void sac_iris::getfhv (char *kname, float *fvalue, int *nerr, int kname_s)
 Get a floating point header value. More...
 
void sac_iris::getihv (char *kname, char *kvalue, int *nerr, int kname_s, int kvalue_s)
 Get a enumerated header value. More...
 
void sac_iris::getkhv (char *kname, char *kvalue, int *nerr, int kname_s, int kvalue_s)
 Get a character string header value. More...
 
void sac_iris::getnhv (char *kname, int *nvalue, int *nerr, int kname_s)
 Get a integer header value. More...
 
void sac_iris::getlhv (char *kname, int *nvalue, int *nerr, int kname_s)
 Get a logical/bool header value. More...
 
void sac_iris::setrhv (char *kname, double *fvalue, int *nerr, int kname_s)
 Set a floating point header value. More...
 
void sac_iris::setfhv (char *kname, float *fvalue, int *nerr, int kname_s)
 Set a floating point header value. More...
 
void sac_iris::setnhv (char *kname, int *nvalue, int *nerr, int kname_s)
 Set a integer header value. More...
 
void sac_iris::setlhv (char *kname, int *nvalue, int *nerr, int kname_s)
 Set a logical/bool header value. More...
 
void sac_iris::setkhv (char *kname, char *kvalue, int *nerr, int kname_s, int kvalue_s)
 Set a character string header value. More...
 
void sac_iris::setihv (char *kname, char *kvalue, int *nerr, int kname_s, int kvalue_s)
 Set a enumerated header value. More...
 

Detailed Description

Compatability routines for fortran style sacio.

Function Documentation

◆ getfhv()

void getfhv ( char *  kname,
float *  fvalue,
int *  nerr,
int  kname_s 
)

Get a floating point header value.

Get a floating point header value from the sac header

Parameters
knameName of header value
fvalueOutput header value
nerrStatus, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
float del4 = 0.0;
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
getfhv("delta", &del4, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(del4, 1.0);
assert_eq(del4, del);

◆ getihv()

void getihv ( char *  kname,
char *  kvalue,
int *  nerr,
int  kname_s,
int  kvalue_s 
)

Get a enumerated header value.

Get a enumerated header value from the sac header

Parameters
knameName of header value
kvalueOutput enumerated value as a string
nerrStatus, 0 on success, non-zero on failure
kname_sLength of kname
kvalue_sLength of kvalue
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
char value[32] = {0};
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
getihv("iftype", value, &nerr, -1, sizeof value);
assert_eq(nerr, 0);
assert_eq(strcmp(value, "ITIME "), 0);

◆ getkhv()

void getkhv ( char *  kname,
char *  kvalue,
int *  nerr,
int  kname_s,
int  kvalue_s 
)

Get a character string header value.

Get a character string header value from the sac header

Parameters
knameName of header value
kvalueOutput header character string
nerrStatus, 0 in success, non-zero on failure
kname_sLength of kname
kvalue_sLength of kvalue
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
char value[32] = {0};
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
getkhv("kcmpnm", value, &nerr, -1, sizeof value);
assert_eq(nerr, 0);
assert_eq(strcmp(value, "Q "), 0);
getkhv("knetwk", value, &nerr, -1, sizeof value);
assert_eq(nerr, 1336);
assert_eq(strcmp(value, "-12345 "), 0);

◆ getlhv()

void getlhv ( char *  kname,
int *  nvalue,
int *  nerr,
int  kname_s 
)

Get a logical/bool header value.

Get a logical/bool header value from the sac header

Parameters
knameName of header value
nvalueOutput header value
nerrStatus, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
int value = 0;
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
getlhv("leven", &value, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(value, 1);
getlhv("lcalda", &value, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(value, 1);

◆ getnhv()

void getnhv ( char *  kname,
int *  nvalue,
int *  nerr,
int  kname_s 
)

Get a integer header value.

Get a integer header value from the sac header

Parameters
knameName of header value
nvalueOutput header value
nerrStatus, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
int value = 0;
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
getnhv("npts", &value, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(value, 100);
getnhv("nvhdr", &value, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(value, 6);
getnhv("nzyear", &value, &nerr, -1);
assert_eq(nerr, 1336);
assert_eq(value, -12345);

◆ getrhv()

void getrhv ( char *  kname,
double *  fvalue,
int *  nerr,
int  kname_s 
)

Get a floating point header value.

Get a floating point header value from the sac header

Parameters
knameName of header value
fvalueOutput header value
nerrStatus, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
double del8 = 0.0;
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
getrhv("delta", &del8, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(del8, 1.0);

◆ newhdr()

void newhdr ( )

Create a new sac header to store in memory.

Creates a new, empy sac header in memory

Note
The header is held in memory and fields are accessible throught getfhv(), getihv(), getkhv(), getnhv(), getlhv() and settable from setfhv(), setihv(), setkhv(), setnhv(), setlhv(). This active header is used during writes in wsac0(), wsac1(), wsac2(), and wsac3().
int nerr = 0, even = 0, nvhdr = 0;
float dt = 0.0;
char ftype[16] = {0};
newhdr();
getlhv("leven", &even, &nerr, -1);
assert_eq(even, 1);
getihv("iftype", ftype, &nerr, -1, sizeof ftype);
assert_eq(strcmp(ftype, "ITIME "), 0);
getnhv("nvhdr", &nvhdr, &nerr, -1);
assert_eq(nvhdr, 6);
getfhv("delta", &dt, &nerr, -1);
assert_eq(dt, SAC_FLOAT_UNDEFINED);

◆ rsac1()

void rsac1 ( char *  kname,
float  yarray[],
int *  nlen,
float *  beg,
float *  del,
int *  max_,
int *  nerr,
int  kname_s 
)

Read an evenly spaced sac file.

Read an evenly spaced sac file

Parameters
knameName of sac file to read
yarrayOutput dependent variable
nlenOutput length of yarray. If the data length is greater than the space specificed by max_, nlen is set to max_, nerr is set to -803, and only the first max_ points are returned
begOutput begin value
delOutput sampling for the independent variable
max_Length of yarray
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX], beg = 0.0, del = 0.0;
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(beg, 0.0);
assert_eq(del, 1.0);
assert_eq(nlen, 100);

An error occurs, -803, if the input arrays are not big enough but the data for the first portion of the file is available

#define MAX 2000
int nlen = 0, max = MAX, nerr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
max = 10;
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, -803);

If the file does not exist, nerr = 801

#define MAX 2000
int nerr = 0, max = MAX, nlen = 0;
float y[MAX] = {0}, beg = 0.0, del = 0.0;
rsac1("t/test_uneven_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 801);

If the file does not exist, nerr = 108

#define MAX 2000
int nerr = 0, max = MAX, nlen = 0;
float y[MAX] = {0}, beg = 0.0, del = 0.0;
rsac1("t/unicorns.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 108);

◆ rsac2()

void rsac2 ( char *  kname,
float *  yarray,
int *  nlen,
float *  xarray,
int *  max_,
int *  nerr,
int  kname_s 
)

Read an unevenly spaced sac file.

Read an unevenly spaced sac file

Parameters
knameName of sac file to read
yarrayOutput dependent variable
nlenOutput length of yarray and xarray
xarrayOutput independent variable
max_Length of yarray
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
#define MAX 2000
float y[MAX] = {0}, x[MAX] = {0};
int nlen = 0, nerr = 0, max = MAX;
rsac2("t/test_uneven_big.sac", y, &nlen, x, &max, &nerr, -1);
assert_eq(nerr, 0);

An error occurs, -803, if the input arrays are not big enough but the data for the first portion of the file is available

#define MAX 2000
int nerr = 0, max = MAX, nlen = 0;
float y[MAX] = {0}, x[MAX] = {0};
max = 10;
rsac2("t/test_uneven_big.sac", y, &nlen, x, &max, &nerr, -1);
assert_eq(nerr, -803);

If the file read is not unevenly spaced, nerr = 802

#define MAX 2000
int nerr = 0, max = MAX, nlen = 0;
float y[MAX] = {0}, x[MAX] = {0};
rsac2("t/test_io_big.sac", y, &nlen, x, &max, &nerr, -1);
assert_eq(nerr, 802);

If the file does not exist, nerr = 108

#define MAX 2000
int nerr = 0, max = MAX, nlen = 0;
float y[MAX] = {0}, x[MAX] = {0};
rsac2("t/unicorns.sac", y, &nlen, x, &max, &nerr, -1);
assert_eq(nerr, 108);

◆ rsach()

void rsach ( char *  kname,
int *  nerr,
int  kname_s 
)

Read a sac file header.

Read a sac file header

Parameters
knameName of sac file header to read
nerrStatus code, 0 on succes, non-zero on failure
kname_sLength of kname
int nerr = 0;
int nvhdr = 0;
char ftype[16] = {0};
float dt = 0.0;
rsach("t/test_io_small.sac", &nerr, -1);
assert_eq(nerr, 0);
getihv("iftype", ftype, &nerr, -1, sizeof ftype);
assert_eq(strcmp(ftype, "ITIME "), 0);
getnhv("nvhdr", &nvhdr, &nerr, -1);
assert_eq(nvhdr, 6);
getfhv("delta", &dt, &nerr, -1);
assert_eq(dt, 1.0);

◆ setfhv()

void setfhv ( char *  kname,
float *  fvalue,
int *  nerr,
int  kname_s 
)

Set a floating point header value.

Set a floating point header value in the active sac header

Parameters
knameName of header value to set
fvalueInput value to set
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()

◆ setihv()

void setihv ( char *  kname,
char *  kvalue,
int *  nerr,
int  kname_s,
int  kvalue_s 
)

Set a enumerated header value.

Set a enumerated header value in the active sac header

Parameters
knameName of header value to set
kvalueInput value to set as a character string
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
kvalue_sLength of kvalue
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()

◆ setkhv()

void setkhv ( char *  kname,
char *  kvalue,
int *  nerr,
int  kname_s,
int  kvalue_s 
)

Set a character string header value.

Set a character string header value in the active sac header

Parameters
knameName of header value to set
kvalueInput value to set
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
kvalue_sLength of kvalue
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()

◆ setlhv()

void setlhv ( char *  kname,
int *  nvalue,
int *  nerr,
int  kname_s 
)

Set a logical/bool header value.

Set a logical/bool header value in the active sac header

Parameters
knameName of header value to set
nvalueInput value to set
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()

◆ setnhv()

void setnhv ( char *  kname,
int *  nvalue,
int *  nerr,
int  kname_s 
)

Set a integer header value.

Set a integer header value in the active sac header

Parameters
knameName of header value to set
nvalueInput value to set
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()

◆ setrhv()

void setrhv ( char *  kname,
double *  fvalue,
int *  nerr,
int  kname_s 
)

Set a floating point header value.

Set a floating point header value in the active sac header

Parameters
knameName of header value to set
fvalueInput value to set
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
Note
This routine requires an internal, global sac file from rsac1(), rsac2() or newhdr()
#define MAX 2000
int nlen = 0, max = MAX, nerr = 0, nvhdr = 0;
float y[MAX];
float beg = 0.0, del = 0.0;
double value = 0.0;
rsac1("t/test_io_small.sac", y, &nlen, &beg, &del, &max, &nerr, -1);
assert_eq(nerr, 0);
value = 1.0/3.0;
setrhv("t0", &value, &nerr, -1);
assert_eq(nerr, 0);
value = 0.0;
getrhv("t0", &value, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(value, (float)(1.0/3.0));
nvhdr = 7;
setnhv("nvhdr", &nvhdr, &nerr, -1);
value = 0.0;
getrhv("t0", &value, &nerr, -1);
assert_eq(nerr, 0);
assert_eq(value, (double)(1.0/3.0));

◆ wsac0()

void wsac0 ( char *  kname,
float *  xarray,
float *  yarray,
int *  nerr,
int  kname_s 
)

Write a sac file.

Write a sac file using the existing header in memory

Parameters
knameName of sac file to write
yarrayInput independent varaible, e.g. x, time, real, amp
xarrayInput dependedent variable, e.g. amplitude, imag, phase
nerrStatus code, 0 on success, non-zero on failue
kname_sLength of kname

Example of writing a time series file from scratch. It is probably better to use wsac1()

int nerr = 0, npts = 0;
float x[MAX] = {0}, y[MAX] = {0}, b = 0.0, dt = 0.0;
newhdr();
npts = 3;
setnhv("npts", &npts, &nerr, -1);
assert_eq(nerr, 0);
setihv("iftype", "itime", &nerr, -1, -1);
assert_eq(nerr, 0);
b = 0.0;
setfhv("b", &b, &nerr, -1);
assert_eq(nerr, 0);
dt = 1.0;
setfhv("delta", &dt, &nerr, -1);
assert_eq(nerr, 0);
y[0] = 0.0;
y[1] = 1.0;
y[2] = 2.0;
wsac0("t/test.wsac0.sac.tmp", x, y, &nerr, -1);
assert_eq(nerr, 0);

Example of writing a spectral file from scratch. It is probably better to use wsac2() This is an 3 point impulse, otherwise known as a triangle; y = (0, 1, 0)

#define PI M_PI
int i = 0;
int nerr = 0, npts = 0;
float x[MAX] = {0}, y[MAX] = {0}, b = 0.0, dt = 0.0;
newhdr();
npts = 8;
setnhv("npts", &npts, &nerr, -1);
npts = 3; // Saved NPTS
setnhv("nsnpts", &npts, &nerr, -1);
setihv("iftype", "iamph", &nerr, -1, -1);
b = 0.0;
setfhv("b", &b, &nerr, -1);
setfhv("sb", &b, &nerr, -1);
dt = 0.125;
setfhv("delta", &dt, &nerr, -1);
dt = 1.0; // Saved delta
setfhv("sdelta", &dt, &nerr, -1);
for(i = 0; i < 8; i++) {
y[i] = 1.0;
}
for(i = 1; i < 4; i++) {
x[ i] = -((double) i) * PI/4.0;
x[8-i] = ((double) i) * PI/4.0;
}
x[0] = 0.0;
x[4] = PI;
wsac0("t/test.wsac0.sac.tmp", x, y, &nerr, -1);
assert_eq(nerr, 0);

◆ wsac1()

void wsac1 ( char *  kname,
float *  yarray,
int *  nlen,
float *  beg,
float *  del,
int *  nerr,
int  kname_s 
)

Write an evenly spaced sac file.

Write an evenly spaced sac file using the header in memory

Parameters
knameName of sac file to write
yarrayInput dependent variable, e.g. amplitude
nlenLength of yarray
begBegin value
deldependent variable sampling
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
int nerr = 0, npts = 0;
float y[MAX] = {0}, b = 0.0, dt = 0.0;
newhdr();
setihv("iftype", "itime", &nerr, -1, -1);
assert_eq(nerr, 0);
npts = 3;
b = 0.0;
dt = 1.0;
y[0] = 0.0;
y[1] = 1.0;
y[2] = 2.0;
wsac1("t/test.wsac1.sac.tmp", y, &npts, &b, &dt, &nerr, -1);
assert_eq(nerr, 0);

◆ wsac2()

void wsac2 ( char *  kname,
float *  yarray,
int *  nlen,
float *  xarray,
int *  nerr,
int  kname_s 
)

Write an unevenly spaced sac file.

Write an unevenly spaced sac file using the header in memory

Parameters
knameName of sac file to write
yarrayInput dependent variable
nlenLength of yarray and xarray
xarrayInput independent variable
nerrStatus code, 0 on success, non-zero on failure
kname_sLength of kname
#define PI M_PI
int i = 0;
int nerr = 0, npts = 0;
float x[MAX] = {0}, y[MAX] = {0}, b = 0.0, dt = 0.0;
newhdr();
npts = 3; // Saved NPTS
setnhv("nsnpts", &npts, &nerr, -1);
npts = 8;
setnhv("npts", &npts, &nerr, -1);
setihv("iftype", "iamph", &nerr, -1, -1);
b = 0.0;
setfhv("b", &b, &nerr, -1);
setfhv("sb", &b, &nerr, -1);
dt = 0.125;
setfhv("delta", &dt, &nerr, -1);
dt = 1.0; // Saved delta
setfhv("sdelta", &dt, &nerr, -1);
for(i = 0; i < 8; i++) {
y[i] = 1.0;
}
for(i = 1; i < 4; i++) {
x[ i] = -((double) i) * PI/4.0;
x[8-i] = ((double) i) * PI/4.0;
}
x[0] = 0.0;
x[4] = PI;
wsac2("t/test.wsac2.sac.tmp", y, &npts, x, &nerr, -1);
assert_eq(nerr, 0);

◆ wsac3()

void wsac3 ( char *  kname,
float *  xarray,
float *  yarray,
int *  nerr,
int  kname_s 
)

Write a sac file.

Write a sac file using the existing header in memory

Parameters
knameName of sac file to write
yarrayInput independent varaible, e.g. x, time, real, amp
xarrayInput dependedent variable, e.g. amplitude, imag, phase
nerrStatus code, 0 on success, non-zero on failue
kname_sLength of kname
Note
This is a simple wrapper around wsac0().