-
Jan Thorbecke authoredJan Thorbecke authored
getWaveletHeaders.c 1.31 KiB
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <math.h>
#include "segy.h"
/**
* reads file which contain the source wavelets and reads receiver positions
*
* AUTHOR:
* Jan Thorbecke (janth@xs4all.nl)
* The Netherlands
**/
int getWaveletHeaders(char *file_src, int n1, int n2, float *gx, float *sx, float *gelev, float *selev, int verbose)
{
FILE *fp;
size_t nread;
int ix;
size_t trace_sz;
off_t offset;
float scl, scll;
segy hdr;
if (file_src == NULL) return 0; /* Input pipe can not be handled */
else fp = fopen( file_src, "r" );
assert( fp != NULL);
nread = fread( &hdr, 1, TRCBYTES, fp );
assert(nread == TRCBYTES);
if (hdr.scalco < 0) scl = 1.0/fabs(hdr.scalco);
else if (hdr.scalco == 0) scl = 1.0;
else scl = hdr.scalco;
if (hdr.scalel < 0) scll = 1.0/fabs(hdr.scalel);
else if (hdr.scalel == 0) scll = 1.0;
else scll = hdr.scalel;
trace_sz = (size_t)sizeof(float)*(n1)+TRCBYTES;
for (ix=0; ix<n2; ix++) {
offset = ix*trace_sz;
fseeko( fp, offset, SEEK_SET );
nread = fread( &hdr, 1, TRCBYTES, fp );
assert(nread == TRCBYTES);
gx[ix] = hdr.gx*scl;
sx[ix] = hdr.sx*scl;
gelev[ix] = -1.0*hdr.gelev*scll;
selev[ix] = -1.0*hdr.selev*scll;
}
fclose(fp);
return 0;
}