⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suflip.c

📁 seismic software,very useful
💻 C
字号:
/* SUFLIP: $Revision: 1.5 $ ; $Date: 90/12/23 16:32:55 $	*//*---------------------------------------------------------------------- * 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) *---------------------------------------------------------------------- */#include "su.h"#include "segy.h"#include "header.h"/*********************** self documentation **********************/string sdoc =" 								\n"" SUFLIP - flip a data set in various ways			\n"" 								\n"" suflip <data1 >data2 flip=1 verbose=0				\n"" 								\n"" Required parameters:						\n"" 	none							\n"" 								\n"" Optional parameters:						\n"" 	flip=1 	rotational sense of flip			\n"" 			+1  = flip 90 deg clockwise		\n"" 			-1  = flip 90 deg counter-clockwise	\n"" 			 0  = transpose data			\n"" 			 2  = flip right-to-left		\n"" 			 3  = flip top-to-bottom		\n"" 	verbose=0	verbose = 1 echoes flip info		\n"" 								\n"" NOTE:  tr.dt header field is lost if flip=-1,+1.  It can be	\n""        reset using sushw.					\n""        [programs internally use tr.dt/1000000.0]		\n"" 								\n"" EXAMPLE PROCESSING SEQUENCES:					\n""   1.	suflip flip=-1 <data1 | sushw key=dt a=4000 >data2	\n"" 								\n""   2.	suflip flip=2 <data1 | suflip flip=2 >data1_again	\n"" 								\n";/**************** end self doc ***********************************//* Credits: *	CWP: Chris, Jack * * Caveat: *	right-left flip (flip = 2) and top-bottom flip (flip = 3) *	don't require the matrix approach.  We sacrificed efficiency *	for uniform coding. *//* suroutine prototype */void flipper(register float **indata, register float **flipdata,		register int ncol, register int nrow, register int flip);segy tr;segybhdr bh;segychdr ch;main(int argc, char **argv){	int flip;		/* flag dictating sense of flip		*/	int verbose;		/* flag for echoing info		*/	FILE *hdrfp;		/* fp for header storage file		*/	float dt;		/* time sample rate			*/	int nt;			/* samples per trace on input		*/	int ntsize; 		/* ... measured in bytes		*/	int ntr;		/* traces in input data			*/	int ntrsize; 		/* ... measured in bytes		*/	register int i;		/* counter			 	*/	register float **data;	/* matrix for input data		*/	register	    float **flipdata;	/* matrix for flipped data		*/	/* Initialize */	initargs(argc, argv);	askdoc(1);	/* Set parameters */	if (!getparint("verbose", &verbose))	verbose = 0;	if (!getparint("flip",    &flip))    	flip = 1;	if (flip != -1 && flip != 0 && flip != 1 && flip != 2 && flip != 3)		err("flip = %d, flag must be -1, 0, 1, 2, or 3", flip);	/* Prepare temporary file to hold headers */	/*hdrfp = tmpfile();*/	hdrfp = etempfile(NULL);	/* Get info from first trace and store first header */	if (!(ntr = gettra(&tr,0)))  err("can't get first trace");	dt = (float)tr.dt/1000000.0;	nt = tr.ns;	ntsize = nt * FSIZE;	ntrsize = ntr * FSIZE;/* get id headers for possible updates */	fseek(stdin,0,0);        gethdr(&ch,&bh);        puthdr(&ch,&bh);	gettr(&tr);	/* Allocate data matrices */	data = ealloc2float(nt, ntr);	if (flip == -1 || flip == 0 || flip == 1) {		flipdata = ealloc2float(ntr, nt);	} else {		flipdata = ealloc2float(nt, ntr);	}	/* Loop over input traces & put them into data matrix */	i = 0;	do {		memcpy((char*)data[i], (char*)tr.data, ntsize); 		efwrite((char *)&tr, 1, HDRBYTES, hdrfp);		++i;	} while (gettr(&tr));	erewind(hdrfp);	/* Verbose print */	if (verbose) {		fprintf(stderr, "\nSUFLIP:          flip = %d\n", flip);		fprintf(stderr, "input:   samples/trace = %d", nt);		fprintf(stderr, "    traces = %d \n", ntr);		if (flip == 1 || flip == 0 || flip == -1) {			fprintf(stderr, "output:  samples/trace = %d", ntr);			fprintf(stderr, "    traces = %d \n\n", nt);		} else {			fprintf(stderr, "output:  samples/trace = %d", nt);			fprintf(stderr, "    traces = %d \n\n", ntr);		}	}	/* Sub does the flipping */	flipper(data, flipdata, nt, ntr, flip); 	/* Output the result by pulling traces off flipdata matrix */	if (flip == -1 || flip == 0 || flip == 1) {		for (i = 0; i < nt; i++) {			memcpy((char*)tr.data, (char*)flipdata[i], ntrsize); 			efread(&tr, 1, HDRBYTES, hdrfp);			tr.ns = ntr;			tr.tracl = i + 1;			puttr(&tr);		}	} else {		for (i = 0; i < ntr; i++) {			memcpy((char*)tr.data, (char*)flipdata[i], ntsize); 			efread(&tr, 1, HDRBYTES, hdrfp);			tr.ns = nt;			tr.dt = dt*1000000.0;			tr.tracl = i + 1;			puttr(&tr);		}	}		return EXIT_SUCCESS;}void flipper(register float **indata, register float **flipdata,		register int ncol, register int nrow, int flip){	register int icol, irow;	switch (flip) {	case -1: 	/*  flip 90 deg counter-clockwise  */		for (irow = 0; irow < nrow; irow++) {			for (icol = 0; icol < ncol; icol++) {				flipdata[icol][nrow-1 - irow] =							indata[irow][icol];			}		}	break;	case 0: 	/*  transpose  */		for (irow = 0; irow < nrow; irow++) {			for (icol = 0; icol < ncol; icol++) {				flipdata[icol][irow] = indata[irow][icol];			}		}	break;	case 1: 	/*  flip 90 deg clockwise  */		for (irow = 0; irow < nrow; irow++) {			for (icol = 0; icol < ncol; icol++) {				flipdata[ncol-1 - icol][irow] =						indata[irow][icol];			}		}	break;	case 2:		/*  flip right-to-left  */		for (irow = 0; irow < nrow; irow++) {			for (icol = 0; icol < ncol; icol++) {				flipdata[nrow-1 - irow][icol] =						indata[irow][icol];			}		}	break;	case 3:		/*  flip top-to-bottom  */		for (irow = 0; irow < nrow; irow++) {			for (icol = 0; icol < ncol; icol++) {				flipdata[irow][ncol-1 - icol] =							indata[irow][icol];			}		}	break;	default:	/*  defensive programming  */		err("%d: mysterious flip value: %d", __LINE__, flip);	}	return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -