New MATLAB Functions For Reading, Writing And Modifying SEG Y Files SEGY Toolbox Instructions
User Manual: Pdf
Open the PDF directly: View PDF .
Page Count: 15
Download | |
Open PDF In Browser | View PDF |
MATLAB : SEGY_Toolbox New MATLAB® functions for reading, writing, and modifying SEG-Y files Heather J.E. Lloyd, Kevin W. Hall and Gary F. Margrave ABSTRACT The SEGY_Toolbox for MATLAB® is a new set of tools that allow SEG_Y files to be read, modified, and written. This toolbox adheres to the SEG-Y Revision 1 standard set out in the SEG Y rev 1 Data Exchange format publication. Unlike previous SEG-Y MATLAB® tools, this toolbox tries to be as flexible as possible when reading SEG-Y files but very stringent when writing SEG-Y files. Currently the following tools are available: SEGY_EditTextHeader, SEGY_StandardizeHeader, SEGY_endianSwap, SEGY_getData, SEGY_getHeader, SEGY_getTraces, SEGY_read, SEGY_readHeader, SEGY_readMulti, SEGY_setHeader, SEGY_write, SEGY_writeHeaders, and SEGY_writeTraces. Please contact the authors if any further functionality is desired. INTRODUCTION In the past few years CREWES has developed several tools for reading and writing SEG-Y files. Most of these tools have been based strictly on the SEG-Y Revision 1 standard, making it difficult to read in files that do not conform to this standard. There have also been some tools that have been developed that will read in non-conforming files, but were fragmented and difficult to use. It has also, in the past, been difficult to use trace header values effectively. A new set of tools has been created that unites these fragmented tools into a cohesive and user friendly tool box. The SEGY_Toolbox allows most SEG-Y files to be read even if they do not conform to the SEG-Y standards. The new tools are distributed as part of the CREWES Matlab toolbox, and are in the segy/Segy_Toolbox directory. In order to use these tools, you will need to download the toolbox, install it, and update your Matlab path. THE OBJECTS This toolbox has been written using an object oriented approach. This means that each of the parts of a SEG-Y file have been made into an object. These objects are difficult to interrogate by themselves, so a series of tools have been made to help the users get the information that they need. There are five main objects that are used in the tool box: the BinaryHeader object, TextHeader object, and the Trace object, which consists of two other objects: the TraceHeader object and the TraceData object. Trace Main Contents: • TraceHeader Object • TraceData Object A Trace object contains two other object, a TraceHeader and a TraceData object. The Trace object is primarily used to keep these two objects together. To get the trace header CREWES Research Report — Volume 22 (2010) 1 Lloyd, Hall, and Margrave information out of a Trace object use SEGY_getHeader. To get the trace data out of a Trace object use SEGY_getData. TraceHeader Main Contents: • Header Information • Definition Information A TraceHeader object stores the trace header information. This object can exist by itself or as part of a Trace object. It uses a Definition file to format the header information into useful data. The information contained in each trace header is specific to the trace it belongs with. To get a piece of header information use the SEGY_getHeader tool. To change a header value, use the SEGY_setHeader tool. These tools will return a value for every trace that was read into Matlab. TraceData Main Contents: • Trace Data A TraceData object contains the traces of the SEG-Y file. It is found in a Traces object. To get the data into a usable Matlab matrix use the tool SEGY_getData. BinaryHeader Main Contents: • Header Information • Definition Information A BinaryHeader object stores the binary header information. The information contained in this object is usually about the whole SEG-Y file. It uses a Definition file to format the header information into useful data. To get a piece of header information use the SEGY_getHeader tool. To change a header value, use the SEGY_setHeader tool. TextHeader Main Contents: • Text header Information A TextHeader object stores the text header information. This is ASCII or EBCDIC formatted text, which is used to communicate information to the User and not the computer. To get the text use the SEGY_getHeader tool. To save changes made to the header use the SEGY_setHeader tool. THE TOOLS SEGY_read Syntax: [traces,texthead,binaryhead,extendedhead]=SEGY_read(filein) • Inputs: filein = the name of the SEG-Y file that is to be read in (optional). • Outputs: 2 CREWES Research Report — Volume 22 (2010) MATLAB : SEGY_Toolbox traces = a TraceHeader object. To get the trace header values use SEGY_getHeader. texthead = a TextHeader object. To get the character array use SEGY_getHeader. binaryhead = a BinaryHeader object. To get the binary header values use SEGY_getHeader. extendedhead = a cell array of TextHeader Objects. To get the character array use SEGY_getHeader. SEGY_read is a tool that reads an entire SEG-Y file into Matlab objects. This tool automatically determines whether the text header is ASCII or EBCDIC format, uses comma delimited files to decode the binary header and the trace header, uses a graphical user interface that allows the user to verify the format of trace data (Figure 1) and uses a dialog box to identify any extended headers. For trace headers and binary headers that do not follow the SEG-Y revision 1 standards some additional steps are required, please see the non-standard SEG-Y files section in this paper. FIG. 1. This figure shows the trace format graphical user interface. The four top plots are histograms of the data when decoded using different file formats. The lower window is a plot of the trace using the selected format indicated by the radio button (in this case the upper left option). SEGY_readHeader Syntax: [tracehead,texthead,binaryhead,extendedhead]=SEGY_read(filein) • Inputs: filein = the name of the SEG-Y file that is to be read in. CREWES Research Report — Volume 22 (2010) 3 Lloyd, Hall, and Margrave • Outputs: texthead = a TextHeader object. To get the character array use SEGY_getHeader. binaryhead = a BinaryHeader object. To get the binary header values use SEGY_getHeader. tracehead = a TraceHeader object. To get the trace header values use SEGY_getHeader. extendedhead = a cell array of TextHeader Objects. To get the character array use SEGY_getHeader. SEGY_readHeader is a tool that will only read in the text header, binary header, extended headers and the trace headers. SEGY_getTraces will load the trace data of selected traces. SEGY_readMulti Syntax: [traces, texthead,binaryhead,extendedhead]=SEGY_readMulti({}) [traces, texthead,binaryhead,extendedhead]=SEGY_readMulti({file1,file2,file3}) [traces, texthead,binaryhead,extendedhead]=SEGY_readMulti({path}) • Inputs: file = a cell array containing the names of the SEG-Y files that are to be read in. file can also be the path to a directory containing *.sgy files. If file is set to {} then a prompt will ask the user to select files. • Outputs: texthead = a TextHeader object. To get the character array use SEGY_getHeader. binaryhead = a BinaryHeader object. To get the binary header values use SEGY_getHeader. traces = a Trace object. To get the trace header values use SEGY_getHeader. To get the trace data values use SEGY_getData. extendedhead = a cell array of TextHeader Objects. To get the character array use SEGY_getHeader. SEGY_readMulti is a tool that will read in several files, or a directory of files and combine them. For this to work, the job id, a number that indicates that the files belong to the same survey, must be the same for all files. If the job id is the same then this program assumes that the file contains the same amount of extended headers in the first file as the subsequent files. This program also assumes that if the trace format code, a value stored in the binary header, is the same for two files then they contain the same format of data. For example, both files would have IBM floating point data, rather than one having IBM type data and the other has IEEE type data. SEGY_getTraces Syntax: traces = SEGY_getTraces(tracehead) traces = SEGY_getTraces(tracehead,word,value); traces = SEGY_getTraces(tracehead,word1,value1,word2,value2,word2,value3,...); 4 CREWES Research Report — Volume 22 (2010) MATLAB : SEGY_Toolbox • Input: tracehead = can be either a TraceHeader object which can be created by SEGY_readHeaders or a filename. word = a name defined in the definitions file, These values are given in Table 1. value = can be either a scalar value or a numerical array • Output: traces = a Trace object. To get the traceheader values use SEGY_getHeader. To get the trace data values use SEGY_getData. SEGY_getTraces is a function that allows the user to selectively read some traces from the file. This is done by comparing value to the traceheader data. The input parameter word must be one of the names defined in the definitions file. To follow the guidelines set out in the SEG-Y revision 1 standard, the word must any of the ones listed in Table 1. If a word is not among the ones listed in Table 1, an error will occur. It is possible to search using multiple words. An example would be: traces = SEGY_getTraces(tracehead,'gx',1:50,'cdpx',60); which would search for traces that have a group (receiver) x coordinate in the range 1:50 and a common depth point x coordinate of 60. Table 1. This table contains the name of the variables used in the definitions file for the trace headers along with a description of what each variable is. These variables are based on the SEGY revision 1 Standard. Name tracl tracr fldr tracf ep cdp cdpt trid nvs nhs duse offset gelev selev sdepth gdel sdel Description Trace sequence number within line Trace sequence number within SEGY file Original field record number Trace number within the original field record Energy source point number Ensemble number Trace number within the ensemble Trace identification code Number of vertically summed traces yielding this trace Number of horizontally stacked traces yielding this trace Data use Distance from center of the source point to the center of the receiver group Receiver group elevation Surface elevation at source Source depth below surface Datum elevation at receiver group Datum elevation at source CREWES Research Report — Volume 22 (2010) 5 Lloyd, Hall, and Margrave swdep gwdep scalel scalco sx sy gx gy counit wevel swevel sut gut sstat gstat tstat laga lagb delrt muts mute ns dt gain igc igi corr sfs sfe slen styp stas stae tatype afilf afils nofilf nofils lcf hcf lcs hcs 6 Water depth at source Water depth at group Scalar to be applied to all elevations and depths Scalar to be applied to all coordinates Source coordinate X Source coordinate Y Group coordinate X Group coordinate Y Coordinate units Weathering velocity Subweathering velocity Uphole time at source in milliseconds Uphole time at group in milliseconds Source static correction in milliseconds Group static correction in milliseconds Total static applied in milliseconds Lag time A Lag Time B Delay recording time Mute start time in milliseconds Mute end time in milliseconds Number of samples in this trace Sample interval in microseconds for this trace Gain type of field instruments Instrument gain constant (dB) Instrument early or initial gain (dB) Correlated Sweep frequency at start (Hz) Sweep frequency at end (Hz) Sweep length in milliseconds Sweep type Sweep trace taper length at start in milliseconds Sweep trace taper length at end in milliseconds Taper type Alias filter frequency (Hz) Alias filter slope (dB/octave) Notch filter frequency (Hz) Notch filter slope (dB/octave) Low-cut frequency (Hz) High-cut frequency (Hz) Low-cut slope (dB/octave) High-cut slope (dB/octave) CREWES Research Report — Volume 22 (2010) MATLAB : SEGY_Toolbox year day hour minute sec timbas trwf grnors grnofr grnlof gaps otrav Year data recorded Day of year Hour of day Minute of hour Second of minute Time basis code Trace weighting factor Geophone group number of roll switch position one Geophone group number of trace number one within original field record Geophone group number of last trace within original field record Gap size Over travel associated with taper at beginning or end of line X coordinate of ensemble (CDP) position of this trace (scalar in Trace Header bytes 71-72 (scalco) applies). The coordinate reference system should cdpx be identified through an extended header Location Data stanza (see section D-1). Y coordinate of ensemble (CDP) position of this trace (scalar in bytes Trace Header 71-72 (scalco) applies). The coordinate reference system should be cdpy identified through an extended header Location Data stanza (see section D1). For 3-D poststack data, this field should be used for the in-line number. If one in-line per SEG Y file is being recorded, this value should be the same iline for all traces in the file and the same value will be recorded in bytes 32053208 (lino) of the Binary File Header. For 3-D poststack data, this field should be used for the cross-line number. xline This will typically be the same value as the ensemble (CDP) number in Trace Header bytes 21-24, but this does not have to be the case. Shotpoint number — This is probably only applicable to 2-D poststack data. Note that it is assumed that the shotpoint number refers to the source location sp nearest to the ensemble (CDP) location for a particular trace. If this is not the case, there should be a comment in the Textual File Header explaining what the shotpoint number actually refers to. Scalar to be applied to the shotpoint number in Trace Header bytes 197-200 to give the real value. If positive, scalar is used as a multiplier; if negative as scalsp a divisor; if zero the shotpoint number is not scaled (i.e. it is an integer. A typical value will be -10, allowing shotpoint numbers with one decimal digit to the right of the decimal point). tval Trace value measurement unit tconstm Transduction Constant mantissa tconste Transduction Constant exponent tunit Transduction Units devtr Device/Trace Identifier scalt Scalar to be applied to times stypeo Source Type/Orientation CREWES Research Report — Volume 22 (2010) 7 Lloyd, Hall, and Margrave sedm sede smmtm smmte smmtu fbpicks scalfb Source Energy Direction with respect to the source orientation mantissa? Source Energy Direction with respect to the source orientation exponent? Source Measurement mantissa Source Measurement exponent Source Measurement Unit First Break Picks ( This is not part of the SEG-Y Revision 1 Standard but has been added as a CREWES Standard) Scaling Factor for first breaks ( This is not part of the SEG-Y Revision 1 Standard but has been added as a CREWES Standard) SEGY_getHeader Syntax: hdr = SEGY_getHeader(obj,word,scalevals) Examples: hdr = SEGY_getHeader(Texthead,'header') val = SEGY_getHeader(Binaryhead,word) val = SEGY_getHeader(Tracehead,word) val = SEGY_getHeader(Trace,word) • • If obj is a TextHeader object, a 40 x 80 char array will be returned; If obj is a BinaryHeader object, word must be a name from the definitions file. SEG-Y revision 1 standard binary header words can be found in Table2. The value returned would be the value that was associated with the variable name. • If obj is a TraceHeader object or a Trace object, word it must be a name from the trace header definitions file. SEG-Y revision 1 trace header standard words can be found in Table 1. This function will return one value associated with this word per trace. For Trace, TraceHeader, or BinaryHeader objects, the values will be automatically scaled by the scale factor in the header, if it is desired to not have these values scaled, then scalevals should be set to zero. An example of this is seen below: val=SEGY_getHeader(tracehead,'fbpicks',0); To allow the values to be scaled enter either of the following: val=SEGY_getHeader(tracehead,'fbpicks',1); or val=SEGY_getHeader(tracehead,'fbpicks'); SEGY_getHeader is a tool that will return the header or header values. For a text header object this tool will return the 40 x 80 character text header. For a binary header, trace header, or trace, object this tool requires the header variable name that is desired, such as ‘cdp’ or ‘gx’ for trace headers. This tool will then return the values associated with that variable name, for a binary header object there will only be one value returned whereas for a trace or trace header object there will be an array of values where one value belongs to each trace. 8 CREWES Research Report — Volume 22 (2010) MATLAB : SEGY_Toolbox TABLE 2. This table contains the name of the variables used in the Binary Header definitions file along with a description of what each variable is. These variables are based on the SEG-Y revision 1 Standard. Name jobid lino reno ntrpr nart hdt dto hns nso format fold tsort vscode hsfs hsfe hslen hstyp schn hstas hstae htatyp hcorr bgrcv rcvm mfeet polyt vpol rev flen netfh unasn1-84 Description Job identification number Line number Reel number Number of data traces per record Number of auxiliary traces per record Sample interval in microseconds Sample interval of field data in microseconds Number of samples per data trace Number of samples recorded in field data per data trace Data sample format code Ensemble fold Trace sorting code Vertical sum code Sweep frequency at start (Hz) Sweep frequency at end (Hz) Sweep length (ms) Sweep type code Trace number of sweep channel Sweep trace taper length (ms) Sweep trace taper length (ms) Taper type Correlated data traces Binary gain recovered Amplitude recovery method Measurement system Impulse signal polarity Vibratory polarity code SEGY Format Revision Number Fixed length trace flag Number Extended Textual File Headers Unassigned values 1 through 84 SEGY_setHeader Syntax: obj=SEGY_setHeader(obj,word,value,scalevals) Examples: Texthead=SEGY_setHeader(Texthead,'header',header) Binaryhead=SEGY_setHeader(Binaryhead,word,value) Tracehead=SEGY_setHeader(Tracehead,word,value) CREWES Research Report — Volume 22 (2010) 9 Lloyd, Hall, and Margrave Trace=SEGY_setHeader(Trace,word,value) • • • For a TextHeader object, word must be 'header' and value must be a 40 x 80 character array. For a BinaryHeader object, word must be a name from the definitions file. The binary header words based on the SEG-Y revision 1 standard can be found in Table 2. Value must be a single value that belonging to the word. For a TraceHeader object or a Trace object, word must be a name from the definitions file. SEG-Y revision 1 standard trace header words can be found in Table 1. Value must be a numerical array where the values are described by the word, and the length of value must be the same as the number of traces. For Trace, TraceHeader, or BinaryHeader objects, the values will be automatically scaled by the scale factor in the header, if it is desired to not have these values scaled then scalevals should be zero. An example of this is seen below. tracehead=SEGY_setHeader(tracehead,'fbpicks',values,0); To allow the values to be scaled enter either of the following: tracehead=SEGY_setHeader(tracehead,'fbpicks',values,1); or tracehead=SEGY_setHeader(tracehead,'fbpicks',values,); SEGY_setHeader is a tool that will set the header or header values. For a text header object this tool will change the 40 x 80 character text header to the user specified header. This header must be of the same dimensions. For a binary header, trace header or trace object, this tool will set the header variable name specified by the user to the values that was specified. It is essential that for trace or trace header objects there is one value for each trace. SEGY_getData Syntax: • • data = SEGY_getData(trace); Input trace = a Trace object containing trace data Output data = the trace data in the object. This data is organized as follows [number of samples x number of traces] SEGY_getData will return the trace data that is stored in a trace object. This is different from SEGY_getTraces as this data is already in Matlab format and is stored in an object. The data can then be manipulated, but if traces are added or subtracted then the trace header values must also be changed to accommodate the change in traces. SEGY_EditTextHeader Syntax: 10 texthdr = SEGY_EditTextHeader(texthead); CREWES Research Report — Volume 22 (2010) MATLAB : SEGY_Toolbox • • texthdr = SEGY_EditTextHeader(); Inputs: texthead can either be left blank or be a TextHeader object Outputs: texthdr is a TextHeader object that contains the updated header if the input was a TextHeader object, else texthdr is a 40 x 80 character array of the updated information. SEGY_EditTextHeader is a tool that allows the user to modify the text header. If the text header is in an un-editable format, this tool allows the user to flip between ASCII and EBCDIC formatting. SEGY_write Syntax: • SEGY_write(fileout,traces,texthead,binaryhead,extendedhead) SEGY_write(fileout,traces,texthead,binaryhead) Inputs: traces = can be a Trace object or a cell array where: {1,1}= is a matrix of traceheader information. This is a (240 x number of traces) of type uint8. {1,2}= is a matrix of traces. This is (tracelength x number of traces) of 4-byte floats. fileout = the name of the new sgy file should end in .sgy texthead = can be a 40 x 80 char array or a TextHeader object. binaryhead = can be a numerical array that satisfies SEG-Y Revision 1 or a BinaryHeader object. extendedhead = is optional. This should be either a 40 x 80 char array or a TextHeader object. If multiple extended headers are required extendedhead can be a cell array containing multiple char arrays or multiple TextHeader objects. SEGY_write is a tool for writing a new SEG-Y file. It strictly adheres to the SEG-Y Revision 1 standards. The text header is written in ASCII format, and trace data are written in big-endian IEEE floating-point format. The binary header and trace headers are written using the definitions in the Revision 1 standard, however, CREWES has set the last two unassigned variables to first break picks (bytes 233-236) and a scale factor for the first break picks (bytes 237-240). If using nonstandard definitions it is essential that the definitions file contains a SEGY_Rev1_EQ column in the spreadsheet, with a list of the Revision 1 standard equivalents. Please see the non-standard SEG-Y files section for more information. SEGY_writeHeaders Syntax:SEGY_writeHeaders(fileout,texthead,binaryhead,extendedhead,permission) SEGY_writeHeaders(fileout,texthead,binaryhead) • Inputs: fileout = the name of the new sgy file should end in .sgy CREWES Research Report — Volume 22 (2010) 11 Lloyd, Hall, and Margrave texthead = can be a 40 x 80 char array or a TextHeader object. binaryhead = can be a numerical array that satisfies SEG-Y Revision 1 or a BinaryHeader object. extendedhead = is optional. This should be either a 40 x 80 char array or a TextHeader object. If multiple extended headers are required then extendedhead can be a cell array containing multiple char arrays or multiple TextHeader objects. permission = if you want to rewrite the headers (not recommended) then use permission='r+' If you want to overwrite an old file or create a new one use permission='w+'. 'w+' is the default. SEGY_writeHeaders is a tool that will only write the text header, binary header, and any extended headers. This is to allow traces to be written in a loop in a subsequent step. To write the traces use SEGY_writeTraces. Like SEGY_write, this tool also adheres to the SEG-Y Revision 1 standards. SEGY_writeTraces Syntax: SEGY_writeTraces(fileout,traces,numcurtraces,numcurshots) SEGY_writeTraces(fileout,{tracehead, tracedata},numcurtraces,numcurshots) • Inputs: fileout = the name of the new sgy file should end in .sgy traces = can be a Trace object or a cell array where: {1,1}= is a matrix of traceheader information. This is a (240 x number of traces) of type uint8. {1,2}= is a matrix of traces. This is a (tracelength x number of traces) of 4-byte floats. numcurtraces = this numeric value states the number of traces that have been written to the file already. This is required for SEG-Y Revision 1 Standards. numcurshots = this is a numeric value that depicts the number of shots that are currently in the file. This is optional but can be helpful when retrieving data. SEGY_writeTraces is a tool that will write trace headers and traces to a file. This tool appends new traces to the end of the file. This function requires the number of traces that are already in the file to be specified. The headers must be written to the file first and then the traces may be appended. To write the headers to the file use SEGY_writeHeaders first. NON-STANDARD SEG-Y FILES When attempting to read SEG-Y files it is rare that they will conform to the SEG-Y Revision 1 Standard. This toolbox can read in these files, however, a few more steps are required. If the trace headers or binary header do not conform to the SEG-Y Revision 1 standard, then a new comma delimited file with definitions needs to be created. This file can either be generated using SEGY_StandardizeHeader, or any spreadsheet program. If a spreadsheet program is being used there must be the column headings: Name, startByte, 12 CREWES Research Report — Volume 22 (2010) MATLAB : SEGY_Toolbox endByte, Type, SEGY_Rev1_EQ, and Description. Name is a variable name used to describe the value, startByte is where the value begins and the endByte is where the value ends, Type is the number format such as int16, and Description is a description of the variable. SEGY_Rev1_EQ is the SEG-Y Revision 1 equivalent; this should be one of the variable names defined in the Table 1 or Table 2. An example of the SEGY_StandardizeHeader interface can be seen in Figure 2. Once this file is created, the non standard file can be read in by adding ‘bindefinitions’, ’bindefinitionfilename.csv’ for binary headers or ‘trcdefinitions’, ’tracedefinitionfilename.csv’. For binary header definitions using the tool SEGY_read it would look like this: [txth, binh, trc, exth]=SEGY_read(filein, ‘bindefinitions’,’nameofdefinitionsfile.csv’) This tool box uses bytes 3224 and 3225 in the file to determine whether or not the file is big endian or little endian, these bytes, in the binary header, are reserved to identify the format of the data traces. If these bytes are not reserved for the format of the data traces the values in the file will not be decoded correctly. If this occurs, use SEGY_endianSwap to correct for this. If a text header is read in incorrectly use SEGY_EditTextHeader to decode appropriately. Extended Headers are assumed to be 40 x 80 character arrays in this initial release. FIG. 2. This figure shows the SEGY_StandardizeHeader interface. The table contains the essential definition information along with some plotting controls for the plot on the right. Several different variables can be plotted at the same time. CONCLUSIONS The SEGY_Toolbox is a new set of Matlab tools for the purpose of reading, modifying and writing SEG-Y files. As this toolbox is new, suggestions and comments on the functionality of this toolbox will be appreciated. CREWES Research Report — Volume 22 (2010) 13 Lloyd, Hall, and Margrave EXAMPLES Reading a SEG-Y file into Matlab. Some analyses are more easily done in a Matlab environment rather than a processing environment. Using commercial processing software, processed data was saved as a SEG-Y file and then opened using the SEGY_Toolbox in Matlab. The goal is to find the common midpoint gather at 550 m and plot against offset. 1. Read in the SEG-Y file called prodata.sgy. [traces,texthead,binaryhead,extendedhead]=SEGY_read(prodata.sgy); 2. Get the cmp values and offset values for all traces cmp=SEGY_getHeader(traces,’cdp’); offset=SEGY_getHeader(traces,’offset’); 3. Search the cmp to find the value at 550m. ind=find(cmp==550); 4. Find the traces and offsets that belong to those values offset550=offset(ind); data=SEGY_getData(traces); data550=data(ind); 5. Plot an image of the data against offset. [traces,texthead,binaryhead,extendedhead]=SEGY_read(prodata.sgy); dt= SEGY_getHeader(binaryhead,’hdt’); or dt=SEGY_getHeader(traces,’dt’); time=0:dt(1):size(data550,1)*dt(1); plotimage(data550,time,offset550); Writing a SEG-Y file from Shot Records Created in Matlab. In the CREWES toolbox there are tools that use finite differencing algorithms to create shot records. It would be useful to make several shot records and write them to a SEG-Y file. 1. Create the variables for the shot records. velocity=1500*ones(101,151);velocity(51:end,:)=4500; dx=10; dtstep=(dx*(1/sqrt(2)./(max(velocity(:))))-.0001); % For stability dt=0.002; tmax=3; xrec=0:dx:1500; zrec=0*xrec; [wavelet,twave]=ricker(dt,40); 2. Plan the seismic experiment. There will be 3 shots at 300m, 900m and 1200m. Each shot will have a receiver every 10 meters along the line for a total of 151 receivers per shot. 14 CREWES Research Report — Volume 22 (2010) MATLAB : SEGY_Toolbox shotpos=[300,900,1200]; ns=length(0:dt:tmax); numtraces=length(xrec)*3;% number of receivers * number of shots 3. Create the binaryheader and textheader using AFD_makeSEGYheaders, a utility that will return values that can be used with the SEGY_Toolbox. [texthead,binaryhead]=AFD_makeSEGYheaders(dt,ns,numtraces,1,3); 4. Write the binaryheader and textheader to SEGY_writeHeaders. fileout=’seismicexp1.sgy’; SEGY_writeHeaders(fileout,texthead,binaryhead); a SEG-Y file using 5. Loop over the number of shots to create the synthetic finite differenced shot records, create traceheaders using AFD_makeSEGYtraceheaders and write the traces and the traceheaders to the SEG-Y file; for k=1:length(shotpos) snap1=zeros(101,151);snap1(1,(shotpos(k)/dx)+1)=1; snap2=snap1; [seismogram,seis,t]=afd_shotrec(dx,dtstep,dt,tmax,velocity,snap1,snap2,... xrec,zrec,wavelet,twave,1); tracehead=AFD_makeSEGYtraceheaders(xrec,ones(size(xrec)),dt,... shotpos(k),1,k); SEGY_writeTraces(fileout,{tracehead, seismogram},length(xrec)*(k-1),k-1); end 6. The SEG-Y file has now been created. ACKNOWLEDGEMENTS The authors would like to thank everyone currently or formerly in CREWES, who have previously worked on the Matlab SEG-Y tools. A large part of the code used in the current project was developed by Chad Hogan. Other contributors include Henry Bland and Carla Osborne. REFERENCES Norris, M. W., Faichney, A. K., 2002, SEG Y rev 1 Data Exchange format, SEG Technical Standards Committee. SEG. Hogan, C., 2004, SEGY Matlab Tool Documentation, CREWES Matlab Toolbox CREWES Research Report — Volume 22 (2010) 15
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : No XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04 Producer : Acrobat Distiller 8.2.5 (Windows) Creator Tool : PScript5.dll Version 5.2.2 Modify Date : 2010:11:27 13:17:37-07:00 Create Date : 2010:11:25 19:45:45-07:00 Metadata Date : 2010:11:27 13:17:37-07:00 Format : application/pdf Title : New MATLAB functions for reading, writing and modifying SEG-Y files Creator : Heather J. E. Lloyd and Kevin W. Hall and Gary F. Margrave Description : CREWES Research Report — Volume 22 (2010).. Document ID : uuid:8e08b8b1-71e3-4de6-802a-eec862de4021 Instance ID : uuid:f1ae3081-f4a0-45d6-8e54-3669801abe2d Page Count : 15 Author : Heather J. E. Lloyd and Kevin W. Hall and Gary F. Margrave Subject : CREWES Research Report — Volume 22 (2010).. Warning : [Minor] Ignored duplicate Info dictionaryEXIF Metadata provided by EXIF.tools