📄 putsegytrace.m
字号:
% PutSegyTrace(segyid,tracedata,SegyTraceHeader,TraceStart);% % Write a SegyTrace to a filehandle 'segyid'%% (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 PutSegyTrace(segyid,tracedata,SegyTraceHeader,SegyHeader);% *** DUE TO A BUG IN MATLAB 6.5 : Technical Solution Number: 31977 % Enable next line if error messages show that not all% trace header values have been set.% Enabling this check will considerably slow down writing % with factor of about 6!% SegyTraceHeader=CheckSegyTraceHeader(SegyTraceHeader); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WRITE SegyTraceHeader if ~exist('TraceStart')==1, TraceStart=ftell(segyid);end fseek(segyid,0,'bof');fseek(segyid,TraceStart,'bof'); % *** fwrite(segyid,ones(1,60),'int32'); fseek(segyid,0,'bof');fseek(segyid,TraceStart,'bof'); % *** WRITETRACEHEADER=1; if WRITETRACEHEADER==1, fseek(segyid,0,'bof'); fseek(segyid,TraceStart,'bof'); fwrite(segyid,SegyTraceHeader.TraceSequenceLine,'int32'); % 0 fwrite(segyid,SegyTraceHeader.TraceSequenceFile,'int32'); % 4 fwrite(segyid,SegyTraceHeader.FieldRecord,'int32'); % 8 fwrite(segyid,SegyTraceHeader.TraceNumber,'int32'); % 12 fwrite(segyid,SegyTraceHeader.EnergySourcePoint,'int32'); % 16 fwrite(segyid,SegyTraceHeader.cdp,'int32'); % 20 fwrite(segyid,SegyTraceHeader.cdpTrace,'int32'); % 24 fwrite(segyid,SegyTraceHeader.TraceIdenitifactionCode,'int16'); % 28 fwrite(segyid,SegyTraceHeader.NSummedTraces,'int16'); % 30 fwrite(segyid,SegyTraceHeader.NStackedTraces,'int16'); % 32 fwrite(segyid,SegyTraceHeader.DataUse,'int16'); % 34 fwrite(segyid,SegyTraceHeader.offset,'int32'); %36 fwrite(segyid,SegyTraceHeader.ReceiverGroupElevation,'int32'); %40 fwrite(segyid,SegyTraceHeader.SourceSurfaceElevation,'int32'); %44 fwrite(segyid,SegyTraceHeader.SourceDepth,'int32'); %48 fwrite(segyid,SegyTraceHeader.ReceiverDatumElevation,'int32'); %52 fwrite(segyid,SegyTraceHeader.SourceDatumElevation,'int32'); %56 fwrite(segyid,SegyTraceHeader.SourceWaterDepth,'int32'); %60 fwrite(segyid,SegyTraceHeader.GroupWaterDepth,'int32'); %64 fwrite(segyid,SegyTraceHeader.ElevationScalar,'int16'); %68 % Multiply/divide next number for following 4 values fwrite(segyid,SegyTraceHeader.SourceGroupScalar,'int16'); %70 fwrite(segyid,SegyTraceHeader.SourceX,'int32'); %72 fwrite(segyid,SegyTraceHeader.SourceY,'int32'); %76 fwrite(segyid,SegyTraceHeader.GroupX,'int32'); %80 fwrite(segyid,SegyTraceHeader.GroupY,'int32'); %84 fwrite(segyid,SegyTraceHeader.CoordinateUnits,'int16'); %88 fwrite(segyid,SegyTraceHeader.WeatheringVelocity,'int16'); %90 fwrite(segyid,SegyTraceHeader.SubWeatheringVelocity,'int16'); %92 fwrite(segyid,SegyTraceHeader.SourceUpholeTime,'int16'); %94 fwrite(segyid,SegyTraceHeader.GroupUpholeTime,'int16'); %96 fwrite(segyid,SegyTraceHeader.SourceStaticCorrection,'int16'); %98 fwrite(segyid,SegyTraceHeader.GroupStaticCorrection,'int16'); %100 fwrite(segyid,SegyTraceHeader.TotalStaticApplied,'int16'); %102 fwrite(segyid,SegyTraceHeader.LagTimeA,'int16'); %104 fwrite(segyid,SegyTraceHeader.LagTimeB,'int16'); %106 fwrite(segyid,SegyTraceHeader.DelayRecordingTime,'int16'); %108 fwrite(segyid,SegyTraceHeader.MuteTimeStart,'int16'); %110 fwrite(segyid,SegyTraceHeader.MuteTimeEND,'int16'); %112 fwrite(segyid,SegyTraceHeader.ns,'uint16'); %114 fwrite(segyid,SegyTraceHeader.dt,'uint16'); %116 fwrite(segyid,SegyTraceHeader.GainType,'int16'); %118 fwrite(segyid,SegyTraceHeader.InstrumentGainConstant,'int16'); %120 fwrite(segyid,SegyTraceHeader.InstrumentInitialGain,'int16'); %%122 fwrite(segyid,SegyTraceHeader.Correlated,'int16'); %124 fwrite(segyid,SegyTraceHeader.SweepFrequenceStart,'int16'); %126 fwrite(segyid,SegyTraceHeader.SweepFrequenceEnd,'int16'); %128 fwrite(segyid,SegyTraceHeader.SweepLength,'int16'); %130 fwrite(segyid,SegyTraceHeader.SweepType,'int16'); %132 fwrite(segyid,SegyTraceHeader.SweepTraceTaperLengthStart,'int16'); %134 fwrite(segyid,SegyTraceHeader.SweepTraceTaperLengthEnd,'int16'); %136 fwrite(segyid,SegyTraceHeader.TaperType,'int16'); %138 fwrite(segyid,SegyTraceHeader.AliasFilterFrequency,'int16'); %140 fwrite(segyid,SegyTraceHeader.AliasFilterSlope,'int16'); %142 fwrite(segyid,SegyTraceHeader.NotchFilterFrequency,'int16'); %144 fwrite(segyid,SegyTraceHeader.NotchFilterSlope,'int16'); %146 fwrite(segyid,SegyTraceHeader.LowCutFrequency,'int16'); %148 fwrite(segyid,SegyTraceHeader.HighCutFrequency,'int16'); %150 fwrite(segyid,SegyTraceHeader.LowCutSlope,'int16'); %152 fwrite(segyid,SegyTraceHeader.HighCutSlope,'int16'); %154 fwrite(segyid,SegyTraceHeader.YearDataRecorded,'int16'); %156 fwrite(segyid,SegyTraceHeader.DayOfYear,'int16'); %158 fwrite(segyid,SegyTraceHeader.HourOfDay,'int16'); %160 fwrite(segyid,SegyTraceHeader.MinuteOfHour,'int16'); %162 fwrite(segyid,SegyTraceHeader.SecondOfMinute,'int16'); %164 fwrite(segyid,SegyTraceHeader.TimeBaseCode,'int16'); %166 fwrite(segyid,SegyTraceHeader.TraceWeightningFactor,'int16'); %170 fwrite(segyid,SegyTraceHeader.GeophoneGroupNumberRoll1,'int16'); %172 fwrite(segyid,SegyTraceHeader.GeophoneGroupNumberFirstTraceOrigField,'int16'); %174 fwrite(segyid,SegyTraceHeader.GeophoneGroupNumberLastTraceOrigField,'int16'); %176 fwrite(segyid,SegyTraceHeader.GapSize,'int16'); %178 fwrite(segyid,SegyTraceHeader.OverTravel,'int16'); %178 fwrite(segyid,SegyTraceHeader.cdpX,'int32'); %180 fwrite(segyid,SegyTraceHeader.cdpY,'int32'); %184 fwrite(segyid,SegyTraceHeader.Inline3D,'int32'); %188 fwrite(segyid,SegyTraceHeader.Crossline3D,'int32'); %192 fwrite(segyid,SegyTraceHeader.ShotPoint,'int32'); %196 fwrite(segyid,SegyTraceHeader.ShotPointScalar,'int16'); %200 fwrite(segyid,SegyTraceHeader.TraceValueMeasurementUnit,'int16'); %202 fwrite(segyid,SegyTraceHeader.TransductionConstantMantissa,'int32'); %204 fwrite(segyid,SegyTraceHeader.TransductionConstantPower,'int16'); %208 fwrite(segyid,SegyTraceHeader.TransductionUnit,'int16'); %210 fwrite(segyid,SegyTraceHeader.TraceIdentifier,'int16'); %212 fwrite(segyid,SegyTraceHeader.ScalarTraceHeader,'int16'); %214 fwrite(segyid,SegyTraceHeader.SourceType,'int16'); %216 fwrite(segyid,SegyTraceHeader.SourceEnergyDirectionMantissa,'int32'); %218 fwrite(segyid,SegyTraceHeader.SourceEnergyDirectionExponent,'int16'); %222 fwrite(segyid,SegyTraceHeader.SourceMeasurementMantissa,'int32'); %224 fwrite(segyid,SegyTraceHeader.SourceMeasurementExponent,'int16'); %228 fwrite(segyid,SegyTraceHeader.SourceMeasurementUnit,'int16'); %230 % WRITE UNASSIGNED CHARACTERS FOR THE REST fwrite(segyid,SegyTraceHeader.UnassignedInt1,'int32'); %232 fwrite(segyid,SegyTraceHeader.UnassignedInt2,'int32'); %236 %fwrite(segyid,zeros(1,4),'int16'); %230 end % 217-240 Unassigned % go to end of header % Any of the nex to lines should work, with the first line being the fastest fseek(segyid,0,'cof'); fseek(segyid,240-216,'cof'); % fseek(segyid,0,'bof'); fseek(segyid,TraceStart+240,'bof'); Revision=SegyHeader.SegyFormatRevisionNumber; if Revision>0, Revision=1; end Format=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).format; BPS=SegyHeader.Rev(Revision+1).DataSampleFormat(SegyHeader.DataSampleFormat).bps; SegymatVerbose([mfilename,' SegyRevision ',sprintf('%0.4g',Revision),', ',Format],3); %% WRITE TRACE DATA; if (strcmp(Format,'uint32')==1)|(strcmp(Format,'uint16')==1), % IBM FLOATING POINT % CONVERT FROM FLOATING POINT SegymatVerbose([mfilename,'Converting from IBM, DataFormat :',SegyHeader.DataSampleFormat],2); tracedata=double(num2ibm(tracedata)); end; fwrite(segyid,tracedata,Format);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -