function [Dataset]=ReadSegyDataset(filename,dest) %READSEGYDATASET Reads a SEG-Y CDP dataset into a data % structure for processing %INPUTS: % filename: The name of the SEGY file to be read. % dest: if 'mem' function reads into matlab memory % if "OutputFileName' the function writes a disk % file named "OutputFileName.mat" which can be % later read into MATLAB with % load OutputFileName.mat %OUTPUTS: % Dataset: A MATLAB structure outlined below %Dataset------Dataset.Info(.Filname,.Ntraces,) % | % Dataset.SegyHeader % | % Dataset.CDP(2)---Dataset.CDP(2).DataTrace(1) % | % | % Dataset.CDP(2).DataTrace(1).SegyTraceHeader % | | % | Dataset.CDP(2).DataTrace(1).SegyTraceHeader.hword % | % | % | % Dataset.CDP(2).DataTrace(1).TraceSamples[] Dataset.Info.Filename=filename; %READ IN THE SEGY FILE [Data,TraceHeaderInfo,SegyTraceHeaders,SegyHeader]=ReadSegy(filename); disp('Putting Traces into Data Structure') s=size(Data); Dataset.Info.Ntraces=s(2); Dataset.SegyHeader=SegyHeader %Find out some info about what we read in. Unique_CDPs=1; %Do the first trace here CDP_Table(1,1)=1; CDP_Table(1,2)=SegyTraceHeaders(1).cdp; CDP_Table(1,3)=1; Dataset.CDP(1).DataTrace(CDP_Table(1,3)).TraceSamples=Data(:,1); Dataset.CDP(1).DataTrace(CDP_Table(1,3)).SegyTraceHeader=SegyTraceHeaders(1); %DO the rest for TraceNumber=2:Dataset.Info.Ntraces % If this trace is from a new CDP make a new branch for the new CDP if isempty(find(SegyTraceHeaders(TraceNumber).cdp == CDP_Table(:,2)))==1 % if we don't find it NumTracesInCDP=1; Shape=size(CDP_Table); CDP_Table(Shape(1)+1,2)=SegyTraceHeaders(TraceNumber).cdp; CDP_Table(Shape(1)+1,1)=CDP_Table(Shape(1),1)+1; CDP_Table(Shape(1)+1,3)=0; end Current_CDP=find(squeeze(CDP_Table(:,2)) == SegyTraceHeaders(TraceNumber).cdp); %Add to the number of traces in the CDP CDP_Table(Current_CDP,3)=CDP_Table(Current_CDP,3)+1; %Put the trace samples into the structure Dataset.CDP(Current_CDP).DataTrace(CDP_Table(Current_CDP,3)).TraceSamples=Data(:,TraceNumber); %Put the header into the structure Dataset.CDP(Current_CDP).DataTrace(CDP_Table(Current_CDP,3)).SegyTraceHeader=SegyTraceHeaders(TraceNumber); %TraceNumber %disp(['read ', TraceNumber, 'traces']) %disp(['into' Current_CDP 'cdps']) end % SAVE Dataset to the disk if the destination is not mem. if length(dest)==length('mem') & dest=='mem' return end save Dataset dest disp(['Saved to ' dest '.m']) clear