📄 gri2sgy.c
字号:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "SEGY1.h"
#include "GRISYS.h"
#define MAX_VALUE 0
#define MIN_VALUE 9999999
#define FAILED 1
int inum;
FILE *infile,*outfile;
int CDP_GATHER_FOLD;
int MAX_IDENT_NUM = MAX_VALUE;
int MAX_TRACE_NUM = MAX_VALUE;
int MAX_CMP = MAX_VALUE;
int MAX_OFFSET = MAX_VALUE;
int MIN_IDENT_NUM = MIN_VALUE;
int MIN_TRACE_NUM = MIN_VALUE;
int MIN_CMP = MIN_VALUE;
int MIN_OFFSET = MIN_VALUE;
int EBCDIC_FIRST = 200000L;
main(argc,argv)
int argc;
char *argv[];
{
struct BINARY_HEADER bin_header;
struct TRACE_HEADER trace_head;
struct GRISYS_DATA_TRACE_HEADER gri_head;
float *ALLOC_VAR;
int TEST[128];
char GRISYS[10]="GRISYS_";
char * out_filename;
char SEGY[10]="SEGY_";
int i,i1;
int *p;
char * EBCDIC_HEADER[80];
/* 12345678901234567890123456789012345678901234567890123456789012345678901234567890*/
EBCDIC_HEADER[ 0 ]="C 1 CLIENT NJCC COMPANY CREW NO ";
EBCDIC_HEADER[ 1 ]="C 2 LINE LINE000 AREA JIANGSU ";
EBCDIC_HEADER[ 2 ]="C 3 REEL NO DAY-START OF REEL YEAR OBSERVER ";
EBCDIC_HEADER[ 3 ]="C 4 INSTRUMENT MFG MODEL SERIAL NO ";
EBCDIC_HEADER[ 4 ]="C 5 DATA TRACES/RECORD AUXILIARY TRACES/RECORD CDP FOLD ";
EBCDIC_HEADER[ 5 ]="C 6 SAMPLE INTERVAL SAMPLES/TRACE BYTES/SAMPLE ";
EBCDIC_HEADER[ 6 ]="C 7 RECORDING FORMAT FORMAT THIS REEL SEG-Y MEASUREMENT SYSTEM METERS ";
EBCDIC_HEADER[ 7 ]="C 8 SAMPLE CODE FLOATING PT ";
EBCDIC_HEADER[ 8 ]="C 9 GAIN TYPE ";
EBCDIC_HEADER[ 9 ]="C10 FILTERS ";
EBCDIC_HEADER[ 10 ]="C11 SOURCE TYPE NUMBER/POINT POINT INTERVAL ";
EBCDIC_HEADER[ 11 ]="C12 PATTERN LENGTH WIDTH ";
EBCDIC_HEADER[ 12 ]="C13 SWEEP START HZ END HZ LENGTH MS CHANNEL NO TYPE ";
EBCDIC_HEADER[ 13 ]="C14 TAPER START LENGTH MS END LENGTH MS TYPE ";
EBCDIC_HEADER[ 14 ]="C15 SPREAD OFFSET MAX DISTANCE GROUP INTERVAL ";
EBCDIC_HEADER[ 15 ]="C16 GEOPHONES PER GROUP SPACING FREQUENCY MFG MODEL ";
EBCDIC_HEADER[ 16 ]="C17 TYPE LENGTH WIDTH ";
EBCDIC_HEADER[ 17 ]="C18 TRACES SORTED BY RECORD PROJECT LINE ID ";
EBCDIC_HEADER[ 18 ]="C19 AMPLITUDE RECOVERY ";
EBCDIC_HEADER[ 19 ]="C20 MAP PROJECTION ZONE ID COORDINATE UNITS ";
EBCDIC_HEADER[ 20 ]="C21 FIELD SUM NAVIGATION SYSTEM RECORDING PARTY ";
EBCDIC_HEADER[ 21 ]="C22 CABLE TYPE DEPTH SHOOTING DIRECTION ";
EBCDIC_HEADER[ 22 ]="C23 ";
EBCDIC_HEADER[ 23 ]="C24 ";
EBCDIC_HEADER[ 24 ]="C25 ";
EBCDIC_HEADER[ 25 ]="C26 ";
EBCDIC_HEADER[ 26 ]="C27 ";
EBCDIC_HEADER[ 27 ]="C28 ";
EBCDIC_HEADER[ 28 ]="C29 ";
EBCDIC_HEADER[ 29 ]="C30 ";
EBCDIC_HEADER[ 30 ]="C31 ";
EBCDIC_HEADER[ 31 ]="C32 ";
EBCDIC_HEADER[ 32 ]="C33 ";
EBCDIC_HEADER[ 33 ]="C34 ";
EBCDIC_HEADER[ 34 ]="C35 ";
EBCDIC_HEADER[ 35 ]="C36 ";
EBCDIC_HEADER[ 36 ]="C37 ";
EBCDIC_HEADER[ 37 ]="C38 ";
EBCDIC_HEADER[ 38 ]="C39 ";
EBCDIC_HEADER[ 39 ]="C40 END EBCDIC ";
/*---------------------------------------------*/
gri_head.LSTSAM=0; /*001 ***/
gri_head.NUMSHP=0;
gri_head.TRACEH=0;
gri_head.NUMCMP=0;
gri_head.RPCMP4=0;
gri_head.FSTSAM=0;
gri_head.TAPERL=0;
gri_head.NUMFLD=0;
gri_head.SAMINT=0;
gri_head.TRACEL=0;
gri_head.TRACEV=0; /*011 ***/
gri_head.RECDID=0;
gri_head.BITSFT=0;
gri_head.AMPMAX=0;
gri_head.TRACEI=0;
gri_head.DELAYT=0;
gri_head.TRACEN=0;
gri_head.NUMREP=0;
gri_head.PROSET=0;
gri_head.OFFSET=0;
gri_head.RPSHP4=0; /*021- */
gri_head.NOCELL1[12]=0; /* hd22-hd33 use for temporary. */
gri_head.ELEAUD=0;
gri_head.TIMEBH=0;
gri_head.DEPSHP=0;
gri_head.DEPREC=0;
gri_head.ELESHP=0;
gri_head.ELEREC=0;
gri_head.ELECMP=0;
gri_head.STASHP=0; /*041- ***/
gri_head.STAREC=0;
gri_head.STACMP=0;
gri_head.STSCMP=0;
gri_head.STRCMP=0;
gri_head.ELEDAT=0;
gri_head.VELSUB=0;
gri_head.RSTSHP=0;
gri_head.RSTRCC=0;
gri_head.RSTCMP=0;
gri_head.FLCSTA=0; /*051 ***/
gri_head.TONCMP=0;
gri_head.AMPCOE=0;
gri_head.AZIMUT=0;
gri_head.FORMAT=0;
gri_head.MNUMFIL=0;
gri_head.NUMSPZ=0;
gri_head.WBRSHP=0;
gri_head.WBRREC=0;
gri_head.WBRCMP=0;
gri_head.X_YCOINT=0; /*061 ***/
gri_head.XCOSHP=0;
gri_head.YCOSHP=0;
gri_head.XCOREC=0;
gri_head.YCOREC=0;
gri_head.XCOCMP=0;
gri_head.YCOCMP=0;
gri_head.NUMLIN=0;
gri_head.MAXAMS=0;
gri_head.NOCELL2[45]=0; /*hd 70--hd114***** save wavelet *****/
gri_head.NOCELL3[8]=0; /*hd115--hd122***** now no use *****/
gri_head.CELNUM=0; /*123 --- 128*/
gri_head.STNUMB=0;
gri_head.MARINE=0;
gri_head.XCORSE=0;
gri_head.YCORSE=0;
gri_head.FORDAT=0;
/******** end definition **********/
/*************************************** open the file ***************************************************/
if(argc==1) {
printf("Forget the exchange file.\n");
exit(FAILED);
}
if((infile=fopen(argv[1],"rb"))==NULL)
{ printf("can't open %s !\n",argv[1]);exit(FAILED);}
/*************************** test for finding the data_type of the data ***********************************/
i1=sizeof(TEST[0]);
printf("sizeof(TEST)=%6d\n",i1);
fread(&TEST[0],4,1,infile);
fseek(infile,0L,0);
printf("TEST=%6d\n",TEST[0]);
/*
fread(TEST,4,128,infile);
fseek(infile,0L,0);
for(i=0;i<128;i++){
printf("%6d,",TEST[i]);
if((i%10)==0) printf("\n");
}
exit(0);
*/
/********************** SEGY -----> GRISYS ********************************/
if(abs(TEST[0])>10000)
{
printf("segy------grisys.\n");
strcat(GRISYS,argv[1]);
/************* construct the output filename **************/
if(argv[2] == NULL) {
printf("out file is %s\n",GRISYS);
outfile=fopen(GRISYS,"wb");
out_filename = GRISYS;
}
else {
printf("out file is %s\n",argv[2]);
outfile=fopen(argv[2],"wb");
out_filename = argv[2];
}
/*********** read segy binary header ***********/
fseek(infile,3200L,0);
if(fread(&bin_header,sizeof(struct BINARY_HEADER),1,infile)!=1)
{
printf("read segy BINARY_HEADER failed.\n");
exit(FAILED);
}
CDP_GATHER_FOLD = bin_header.CDP_MULTIPLICITY;
printf("NUM_of_SAMP_POINT_HERE %d\n",bin_header.NUM_of_SAMP_POINT_HERE);
printf("SAMPLE_INTERVAL_HERE %dms.\n",bin_header.SAMPLE_INTERVAL_HERE/1000);
/*
printf("CDP_GATHER_FOLD is %d.\n",CDP_GATHER_FOLD);
*/
inum=0;
while(feof(infile)==0 )
{
inum+=1;
/******** read segy trace header ***********/
if(fread(&trace_head,sizeof(struct TRACE_HEADER),1,infile)!=1)
{
/*
printf("read segy TRACE_HEADER failed.\n");
exit(FAILED);
printf("reading complete.\n");
*/
break;
}
/***** alloc some memory for seismic data_set ********/
if((ALLOC_VAR=(float *)malloc(trace_head.LTRSAM*4L+20L))==NULL)
{
printf("alloc failed!\n");
exit(FAILED);
}
/***** read a few seismic trace. *******/
if(fread(ALLOC_VAR,4,trace_head.LTRSAM,infile) != trace_head.LTRSAM)
{
printf("read seismic data failed!\n");
exit(FAILED);
}
/******** assign segy value to the grisys trace_header *********/
gri_head.LSTSAM = trace_head.LTRSAM * trace_head.SAMPLE_INTERVAL/1000;
gri_head.TRACEL = trace_head.LTRSAM * trace_head.SAMPLE_INTERVAL/1000;
gri_head.NUMSHP = trace_head.IDENT_NUM;
gri_head.NUMCMP = trace_head.CMP;
/* -----------SEGY TO gri and want TO CGG----------------------------------------
gri_head.NUMCMP = trace_head.RESID_STATCOR_SOURCE;
gri_head.NUMLIN = trace_head.TEMP1;
gri_head.RPSHP4 = trace_head.TEMP2*4;
gri_head.NUMREP = trace_head.CMP_DATCOR_APP;
gri_head.XCOCMP = trace_head.NO_ALLOC[2];
gri_head.YCOCMP = trace_head.NO_ALLOC[3];
*/
/* -------------------------------------------------------*/
/* -----------SEGY TO gri ELE_SOURCE and ELE_DETECT and ELE_CMP ----------------*/
gri_head.ELESHP = trace_head.ELEVATION_SOURCE;
gri_head.ELEREC = trace_head.ELEVATION_DETECT;
gri_head.NUMFLD = CDP_GATHER_FOLD;
gri_head.SAMINT = trace_head.SAMPLE_INTERVAL/1000;
gri_head.TRACEV = 7;
/*
gri_head.TRACEV = 14 - 2*trace_head.TRACE_ID_CODE;
*/
gri_head.DELAYT = trace_head.LAG_TIME_A;
gri_head.TRACEN = trace_head.TRACE_NUM;
gri_head.OFFSET = abs(trace_head.SOURCE_to_DETECT_DISTANCE);
gri_head.DEPSHP = trace_head.WATER_DEPTH_SOURCE;
gri_head.DEPREC = trace_head.WATER_DEPTH_DETECT;
gri_head.RSTSHP = trace_head.STA_CORR_SOURCE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -