📄 getsegytraceheader.m
字号:
% GetSegyTraceHeader : Reads a seg y trace, data and header
%
% [SegyTraceHeader]=GetSegyTraceHeader(segyid,TraceStart,DataFormat,ns);
%
%
% (C) 2001-2004 Thomas Mejer Hansen, tmh@gfy.ku.dk/thomas@cultpenguin.com
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%
function [SegyTraceHeader]=GetSegyTraceHeader(segyid,TraceStart,DataFormat,ns,SegyTraceHeader);
if exist('DataFormat')==0, DataFormat='float32'; end
if exist('TraceStart')==0, TraceStart=ftell(segyid); end
if exist('SegyTraceHeader')
if isempty('SegyTraceHeader');
clear SegyTraceHeader;
end
end
fseek(segyid,TraceStart,'bof');
% GET POSITION FOR EASY LATER LOCALIZATION
SegyTraceHeader.SegyMAT_TraceStart = ftell(segyid);
SegyTraceHeader.TraceSequenceLine=fread(segyid,1,'int32'); % 0
SegyTraceHeader.TraceSequenceFile=fread(segyid,1,'int32'); % 4
SegyTraceHeader.FieldRecord=fread(segyid,1,'int32'); % 8
SegyTraceHeader.TraceNumber=fread(segyid,1,'int32'); % 12
SegyTraceHeader.EnergySourcePoint=fread(segyid,1,'int32'); % 16
SegyTraceHeader.cdp=fread(segyid,1,'int32'); % 20
SegyTraceHeader.cdpTrace=fread(segyid,1,'int32'); % 24
SegyTraceHeader.TraceIdenitifactionCode=fread(segyid,1,'int16'); % 28
SegyTraceHeader.NSummedTraces=fread(segyid,1,'int16'); % 30
SegyTraceHeader.NStackedTraces=fread(segyid,1,'int16'); % 32
SegyTraceHeader.DataUse=fread(segyid,1,'int16'); % 34
SegyTraceHeader.offset=fread(segyid,1,'int32'); %36
SegyTraceHeader.ReceiverGroupElevation=fread(segyid,1,'int32'); %40
SegyTraceHeader.SourceSurfaceElevation=fread(segyid,1,'int32'); %44
SegyTraceHeader.SourceDepth=fread(segyid,1,'int32'); %48
SegyTraceHeader.ReceiverDatumElevation=fread(segyid,1,'int32'); %52
SegyTraceHeader.SourceDatumElevation=fread(segyid,1,'int32'); %56
SegyTraceHeader.SourceWaterDepth=fread(segyid,1,'int32'); %60
SegyTraceHeader.GroupWaterDepth=fread(segyid,1,'int32'); %64
SegyTraceHeader.ElevationScalar=fread(segyid,1,'int16'); %68
% Multiply/divide next number for following 4 values
SegyTraceHeader.SourceGroupScalar=fread(segyid,1,'int16'); %70
SegyTraceHeader.SourceX=fread(segyid,1,'int32'); %72
SegyTraceHeader.SourceY=fread(segyid,1,'int32'); %76
SegyTraceHeader.GroupX=fread(segyid,1,'int32'); %80
SegyTraceHeader.GroupY=fread(segyid,1,'int32'); %84
SegyTraceHeader.CoordinateUnits=fread(segyid,1,'int16'); %88
SegyTraceHeader.WeatheringVelocity=fread(segyid,1,'int16'); %90
SegyTraceHeader.SubWeatheringVelocity=fread(segyid,1,'int16'); %92
SegyTraceHeader.SourceUpholeTime=fread(segyid,1,'int16'); %94
SegyTraceHeader.GroupUpholeTime=fread(segyid,1,'int16'); %96
SegyTraceHeader.SourceStaticCorrection=fread(segyid,1,'int16'); %98
SegyTraceHeader.GroupStaticCorrection=fread(segyid,1,'int16'); %100
SegyTraceHeader.TotalStaticApplied=fread(segyid,1,'int16'); %102
SegyTraceHeader.LagTimeA=fread(segyid,1,'int16'); %104
SegyTraceHeader.LagTimeB=fread(segyid,1,'int16'); %106
SegyTraceHeader.DelayRecordingTime=fread(segyid,1,'int16'); %108
SegyTraceHeader.MuteTimeStart=fread(segyid,1,'int16'); %110
SegyTraceHeader.MuteTimeEND=fread(segyid,1,'int16'); %112
SegyTraceHeader.ns=fread(segyid,1,'uint16'); %114
SegyTraceHeader.dt=fread(segyid,1,'uint16'); %116
SegyTraceHeader.GainType=fread(segyid,1,'int16'); %118
SegyTraceHeader.InstrumentGainConstant=fread(segyid,1,'int16'); %120
SegyTraceHeader.InstrumentInitialGain=fread(segyid,1,'int16'); %%122
SegyTraceHeader.Correlated=fread(segyid,1,'int16'); %124
SegyTraceHeader.SweepFrequenceStart=fread(segyid,1,'int16'); %126
SegyTraceHeader.SweepFrequenceEnd=fread(segyid,1,'int16'); %128
SegyTraceHeader.SweepLength=fread(segyid,1,'int16'); %130
SegyTraceHeader.SweepType=fread(segyid,1,'int16'); %132
SegyTraceHeader.SweepTraceTaperLengthStart=fread(segyid,1,'int16'); %134
SegyTraceHeader.SweepTraceTaperLengthEnd=fread(segyid,1,'int16'); %136
SegyTraceHeader.TaperType=fread(segyid,1,'int16'); %138
SegyTraceHeader.AliasFilterFrequency=fread(segyid,1,'int16'); %140
SegyTraceHeader.AliasFilterSlope=fread(segyid,1,'int16'); %142
SegyTraceHeader.NotchFilterFrequency=fread(segyid,1,'int16'); %144
SegyTraceHeader.NotchFilterSlope=fread(segyid,1,'int16'); %146
SegyTraceHeader.LowCutFrequency=fread(segyid,1,'int16'); %148
SegyTraceHeader.HighCutFrequency=fread(segyid,1,'int16'); %150
SegyTraceHeader.LowCutSlope=fread(segyid,1,'int16'); %152
SegyTraceHeader.HighCutSlope=fread(segyid,1,'int16'); %154
SegyTraceHeader.YearDataRecorded=fread(segyid,1,'int16'); %156
SegyTraceHeader.DayOfYear=fread(segyid,1,'int16'); %158
SegyTraceHeader.HourOfDay=fread(segyid,1,'int16'); %160
SegyTraceHeader.MinuteOfHour=fread(segyid,1,'int16'); %162
SegyTraceHeader.SecondOfMinute=fread(segyid,1,'int16'); %164
SegyTraceHeader.TimeBaseCode=fread(segyid,1,'int16'); %166
if SegyTraceHeader.TimeBaseCode==1, SegyTraceHeader.TimeBaseCodeText='Local';
elseif SegyTraceHeader.TimeBaseCode==2, SegyTraceHeader.TimeBaseCodeText='GMT';
elseif SegyTraceHeader.TimeBaseCode==3, SegyTraceHeader.TimeBaseCodeText='Other';
elseif SegyTraceHeader.TimeBaseCode==4, SegyTraceHeader.TimeBaseCodeText='UTC';
else SegyTraceHeader.TimeBaseCodeText=''; end
SegyTraceHeader.TraceWeightningFactor=fread(segyid,1,'int16'); %170
SegyTraceHeader.GeophoneGroupNumberRoll1=fread(segyid,1,'int16'); %172
SegyTraceHeader.GeophoneGroupNumberFirstTraceOrigField=fread(segyid,1,'int16'); %174
SegyTraceHeader.GeophoneGroupNumberLastTraceOrigField=fread(segyid,1,'int16'); %176
SegyTraceHeader.GapSize=fread(segyid,1,'int16'); %178
SegyTraceHeader.OverTravel=fread(segyid,1,'int16'); %178
SegyTraceHeader.cdpX=fread(segyid,1,'int32'); %180
SegyTraceHeader.cdpY=fread(segyid,1,'int32'); %184
SegyTraceHeader.Inline3D=fread(segyid,1,'int32'); %188
SegyTraceHeader.Crossline3D=fread(segyid,1,'int32'); %192
SegyTraceHeader.ShotPoint=fread(segyid,1,'int32'); %196
SegyTraceHeader.ShotPointScalar=fread(segyid,1,'int16'); %200
SegyTraceHeader.TraceValueMeasurementUnit=fread(segyid,1,'int16'); %202
if SegyTraceHeader.TraceValueMeasurementUnit==-1, SegyTraceHeader.TraceValueMeasurementUnitText='Other';
elseif SegyTraceHeader.TraceValueMeasurementUnit==0, SegyTraceHeader.TraceValueMeasurementUnitText='Unknown';
elseif SegyTraceHeader.TraceValueMeasurementUnit==1, SegyTraceHeader.TraceValueMeasurementUnitText='Pascal (Pa)';
elseif SegyTraceHeader.TraceValueMeasurementUnit==2, SegyTraceHeader.TraceValueMeasurementUnitText='Volts (v)';
elseif SegyTraceHeader.TraceValueMeasurementUnit==3, SegyTraceHeader.TraceValueMeasurementUnitText='Millivolts (v)';
elseif SegyTraceHeader.TraceValueMeasurementUnit==4, SegyTraceHeader.TraceValueMeasurementUnitText='Amperes (A)';
elseif SegyTraceHeader.TraceValueMeasurementUnit==5, SegyTraceHeader.TraceValueMeasurementUnitText='Meters (m)';
elseif SegyTraceHeader.TraceValueMeasurementUnit==6, SegyTraceHeader.TraceValueMeasurementUnitText='Meters Per Second (m/s)';
elseif SegyTraceHeader.TraceValueMeasurementUnit==7, SegyTraceHeader.TraceValueMeasurementUnitText='Meters Per Second squared (m/&s2)Other';
elseif SegyTraceHeader.TraceValueMeasurementUnit==8, SegyTraceHeader.TraceValueMeasurementUnitText='Newton (N)';
elseif SegyTraceHeader.TraceValueMeasurementUnit==8, SegyTraceHeader.TraceValueMeasurementUnitText='Watt (W)';
else SegyTraceHeader.TraceValueMeasurementUnitText='Undefined'; end
SegyTraceHeader.TransductionConstantMantissa=fread(segyid,1,'int32'); %204
SegyTraceHeader.TransductionConstantPower=fread(segyid,1,'int16'); %208
SegyTraceHeader.TransductionUnit=fread(segyid,1,'int16'); %210
SegyTraceHeader.TraceIdentifier=fread(segyid,1,'int16'); %212
SegyTraceHeader.ScalarTraceHeader=fread(segyid,1,'int16'); %214
SegyTraceHeader.SourceType=fread(segyid,1,'int16'); %216
SegyTraceHeader.SourceEnergyDirectionMantissa=fread(segyid,1,'int32'); %218
SegyTraceHeader.SourceEnergyDirectionExponent=fread(segyid,1,'int16'); %222
SegyTraceHeader.SourceMeasurementMantissa=fread(segyid,1,'int32'); %224
SegyTraceHeader.SourceMeasurementExponent=fread(segyid,1,'int16'); %228
SegyTraceHeader.SourceMeasurementUnit=fread(segyid,1,'int16'); %230
SegyTraceHeader.UnassignedInt1=fread(segyid,1,'int32'); %232
SegyTraceHeader.UnassignedInt2=fread(segyid,1,'int32'); %236
if exist('ns')==0,
ns=SegyTraceHeader.ns;
end
% GO TO POSITION OF DATA
fseek(segyid,TraceStart+240,'bof');
SegyTraceHeader.SegyMAT_TraceDataStart = ftell(segyid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -