📄 suwig.c
字号:
/* SUWIG: $Revision: 1.5 $ ; $Date: 90/11/10 13:21:40 $ *//*---------------------------------------------------------------------- * Copyright (c) Colorado School of Mines, 1990. * All rights reserved. * * This code is part of SU. SU stands for Seismic Unix, a processing line * developed at the Colorado School of Mines, partially based on Stanford * Exploration Project (SEP) software. Inquiries should be addressed to: * * Jack K. Cohen, Center for Wave Phenomena, Colorado School of Mines, * Golden, CO 80401 (jkc@dix.mines.colorado.edu) *---------------------------------------------------------------------- */#include "su.h"#include "segy.h"#include "vplot.h"/*********************** self documentation ******************************/string sdoc = "\ \n\SUWIG - no-frills wiggle trace program for data plotting \n\ \n\suwig <stdin [optional parameters] | pen \n\ \n\Optional Parameters: \n\ fill = 0 flag for positive fill (=1 for fill) \n\ sizet = 6.0 length of t-axis (inches) \n\ sizex = 4.7 length of x-axis (inches) \n\ zerot = 1.0 base of plot to bottom of screen \n\ zerox = 0.6 left of plot to left of screen \n\ plotfat = 0 line thickness of traces \n\ overlap = 2.0 max deflection (in traces) is \n\ overlap*scale \n\ \n\gain defaults (see sugain): \n\ tpow=0.0 epow=0.0 gpow=1.0 agc=0 wagc=0.2 \n\ trap=0.0 clip=0.0 qclip=1.0 qbal=1 pbal=0 scale=1.0 \n\";/**************** end self doc *******************************************//* Credits: * SEP: Shuki * CWP: Chris, Jack * *//* Set plotting defaults */#define FILL 0#define OVERLAP 2.0#define ZEROT 1.0#define ZEROX 0.6#define SIZET 6.0#define SIZEX 4.7#define PLOTFAT 0/* Set gain defaults (balance by maximum magnitude) */#define TPOW 0.0#define EPOW 0.0#define GPOW 1.0#define AGC 0#define WAGC 0.2#define TRAP 0.0#define CLIP 0.0#define QCLIP 1.0#define QBAL 1 /* default is balance by maximum magnitude */#define PBAL 0#define SCALE 1.0segy tr;main(int argc, char **argv){ float *dataptr; /* mega-vector of data from the segys */ float dt; /* sample rate */ float tmin; /* first time on trace */ int nt; /* time samples per trace (from tr.ns) */ int ntsize; /* number of data bytes on a trace */ int ntr; /* traces in input data (from gettr) */ int ndata; /* floats allocated for mega-vector */ /* prototypes */ void wigplot(float *dataptr, int nt, int ntr); /* Initialize */ initargs(argc, argv); askdoc(1); /* Prevent bytes from spilling onto screen */ if (isatty(STDOUT)) { err("must redirect or pipe byte code output"); } /* Get info from first trace */ if (!gettr(&tr)) err("can't get first trace"); nt = tr.ns; ntsize = nt * FSIZE; /* Allocate block of memory for data float mega-vector */ ndata = MAX(NFALLOC, nt); /* alloc at least one trace */ dataptr = ealloc1float(ndata); /* Loop over input traces & put them into data mega-vector */ ntr = 0; do { ++ntr; if (ntr*nt > ndata) { /* need more memory */ ndata += NFALLOC; dataptr = erealloc1float(dataptr, ndata); } bcopy(tr.data, dataptr + (ntr - 1)*nt, ntsize); } while (gettr(&tr)); /* Gain */ tmin = tr.delrt/1000.0; dt = tr.dt/1000000.0; if (!dt) dt=0.004; gain(dataptr, TPOW, EPOW, GPOW, AGC, TRAP, CLIP, QCLIP, QBAL, PBAL, SCALE, tmin, dt, WAGC, nt, ntr); /* Plot */ warn("nt = %d ntr = %d", nt, ntr); wigplot(dataptr, nt, ntr); vp_endplot (); return EXIT_SUCCESS;}/* Wiggle plot subroutine for vertical plotting */void wigplot(float *dataptr, int nt, int ntr){ float scalet; /* time axis scale */ float scalex; /* trace axis scale */ float sizet; /* length of t-axis (inches) */ float sizex; /* length of x-axis (inches) */ float zerot; /* base of plot to bot. of screen */ float zerox; /* left of plot to left of screen */ int fill; /* fill flag */ float overlap; /* maximum trace overlap */ int plotfat; /* line thickness of traces */ register int i; /* counter */ /* Get parameters */ if (!igetpar("fill", &fill)) fill = FILL; if (!fgetpar("overlap", &overlap)) overlap = OVERLAP; if (!fgetpar("zerot", &zerot)) zerot = ZEROT; if (!fgetpar("zerox", &zerox)) zerox = ZEROX; if (!fgetpar("sizet", &sizet)) sizet = SIZET; if (!fgetpar("sizex", &sizex)) sizex = SIZEX; scalet = -sizet/nt; scalex = sizex/MAX(ntr, 8); if (!igetpar("plotfat", &plotfat)) plotfat = PLOTFAT; vp_scale (scalex, scalet); vp_orig (zerox, zerot + sizet); /* Draw wiggle traces */ vp_color (RED); vp_fat (plotfat); vp_scale (scalex*overlap, scalet); for (i = 0; i < ntr; i++) { vp_uorig (-(float) i / overlap, 0.0); vertvwig(dataptr + nt*i, nt, fill); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -