SUSHW - Set one or more Header Words
using trace number, mod and integer divide to compute the header word values or
input the header word values from a file
... compute header fields
sushw <stdin >stdout key=cdp,..
a=0,.. b=0,.. c=0,.. d=0,..
j=..,..
... or read headers
from a binary file
sushw <stdin > stdout key=key1,.. infile=binary_file
Required Parameters for setting headers from
infile:
key=key1,key2 ... is the list of header
fields as they appear in infile
infile= binary file of
values for field specified by
key1,key2,...
Optional parameters ():
key=cdp,... header
key word(s) to set
a=0,... value(s)
on first trace
b=0,... increment(s)
within group
c=0,... group
increment(s)
d=0,... trace number shift(s)
j=ULONG_MAX,ULONG_MAX,... number
of elements in group
Notes:
Fields that are getparred must have the same
number of entries as key
words being set. Any field that is not
getparred is set to the default
value(s) above. Explicitly setting j=0 will set j to ULONG_MAX.
The value of each header word key is computed using the formula:
i = itr + d
val(key)
= a + b * (i % j) + c * (i / j)
where itr is the trace number (first trace
has itr=0, NOT 1)
Examples:
1. set every dt field to 4ms
sushw
<indata key=dt a=4000 |...
2. set the sx field of the first 32 traces to
6400, the second 32 traces
to
6300, decrementing by -100 for each 32 trace groups
...| sushw
key=sx a=6400 c=-100 j=32 |...
3. set the offset fields of each group of 32
traces to 200,400,...,6400
...|
sushw key=offset a=200 b=200 j=32 |...
4. perform operations 1., 2., and 3. in one call
..| sushw key=dt,sx,offset a=4000,6400,200
b=0,0,200 c=0,-100,0 j=0,32,32 |
In this example, we set every dt field to 4ms. Then we set the first
32 shotpoint fields
to 6400, the second 32 shotpoint fields to 6300 and
so forth.
Next we set each group of 32 offset fields to 200, 400, ...,
6400.
Example of a typical processing sequence
using suchw:
sushw <indata key=dt a=4000 |
sushw key=sx a=6400 c=-100 j=32 |
sushw key=offset a=200 b=200 j=32 |
suchw key1=gx key2=offset key3=sx b=1 c=1 |
suchw key1=cdp key2=gx key3=sx b=1 c=1 d=2
>outdata
Again, it is possible to eliminate the
multiple calls to both sushw and
sushw, as in Example 4.
Reading header values from a binary file:
If the parameter infile=binary_file is set,
then the values that are to
be set
for the fields specified by key=key1,key2,... are read from that
file. The values are read sequentially from
the file and assigned trace
by
trace to the input SU data. The infile consists of C (unformated)
binary floats in the form of an array of size (nkeys)*(ntraces)
where
nkeys is the number of floats in the first (fast) dimension and
ntraces
is the number of traces.
Comment:
Users wishing to edit one or more header
fields (as in geometry setting)
may do this via the following sequence:
sugethw < sudata output=geom
key=key1,key2 ... > hdrfile
Now edit the ASCII file hdrfile with any
editor, setting the fields
appropriately. Convert hdrfile to a binary
format via:
a2b < hdrfile n1=nfields >
binary_file
Then set the header fields via:
sushw < sudata infile=binary_file key1
key2 ... > sudata.edited
Caveat:
If the (number of traces)*(number of key words)
exceeds the number of
values in the infile then the user may still
set a single header field
on the
remaining traces via the parameters key=keyword a,b,c,d,j.
Example:
sushw < sudata=key1,key2 ...
infile=binary_file [Optional Parameters]
Credits:
SEP:
Einar Kajartansson
CWP: Jack K.
Cohen
CWP: John Stockwell,
added multiple fields and infile= options
Caveat:
All
constants are cast to doubles.