You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.2 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD>: SegY<67>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
// <20><><EFBFBD><EFBFBD>SegY<67>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>Ϣ<EFBFBD><CFA2><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2011-4-1
//
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "rowcol.h"
#include "binaryposition.h"
namespace NSeis
{
//SegY<67><59>ʽ<EFBFBD>ṹ/////////////////////////////////////////////////////////////////////
//
// | <20>ļ<EFBFBD>ͷ | <20><>һ<EFBFBD><D2BB> | <20>ڶ<EFBFBD><DAB6><EFBFBD> | <20><>n<EFBFBD><6E> |<7C><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> |
// --------------------------------------------------------------------
// | 3200+400 | 240 | | 240 | | | 240 | |
// | <20>ֽ<EFBFBD> | <20>ֽ<EFBFBD> | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <20>ֽ<EFBFBD> | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ....... | <20>ֽ<EFBFBD> | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
// | <20>ļ<EFBFBD>ͷ | <20><>ͷ | | <20><>ͷ | | | <20><>ͷ | |
// --------------------------------------------------------------------
//
///////////////////////////////////////////////////////////////////////////////////
//SegY<67><59>ʽ<EFBFBD>ļ<EFBFBD>ͷ,<2C>ܹ<EFBFBD>3600<30><30><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>õĽ<C3B5><C4BD>Ǻ<EFBFBD>400<30><30><EFBFBD>ֽ<EFBFBD>
//#define SGY_FILE_HEADER_LEN 3600
//#define SGY_TRACE_HEADER_LEN 240
class AFX_EXT_CLASS CSeisFileHeader
{
public:
CSeisFileHeader(void);
~CSeisFileHeader(void);
int ReadHeader(CFileSegy& fr);
void Initialize(void); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B6A8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>ȡͷ<C8A1><CDB7><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>
int line_num; /* (04-07)line number (only one line per reel) */
unsigned short sample_interval; /* (16-17)sample interval in micro secs for this reel */
unsigned short sample_num; /* (20-21)number of samples per trace for this reel */
short format_code; /* (24-25)data sample format code:
1 = floating point (4 bytes)
2 = fixed point (4 bytes)
3 = fixed point (2 bytes)
4 = fixed point w/gain code (4 bytes)
+ SEG-Y rev 1:
5 = IEEE float (4 bytes)
8 = signed char (1 byte)*/
short system_coor; /* (54-55)measurement system code: 1 = meters 2 = feet */
inline BYTE* GetBytes(int offset, int len){ return m_byHeader + offset; }
inline BYTE* GetHeader() { return m_byHeader; };
int GetFormatLength(); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>format_code<64><65>ʼ<EFBFBD><CABC>֮<EFBFBD><D6AE>
void operator=(CSeisFileHeader& dbf);
protected:
BYTE m_byHeader[400];
};
class AFX_EXT_CLASS CSeisTraceInfo
{
public:
CSeisTraceInfo(void);
bool isUsable; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ,(28-29)<29><><EFBFBD><EFBFBD>Ϊ1ʱ<31><CAB1><EFBFBD><EFBFBD>ȷ
unsigned short sample_interval; /* (116-117)sample interval in micro secs for this reel */
unsigned short sample_num; /* (114-115)number of samples per trace for this reel */
double m_dCoorScale; //(70-71)<29><><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool m_bUseCoorScale; //<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
short system_coor; //<2F><><EFBFBD>굥λ: 1 = meters 2 = feet<65><74><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD>л<EFBFBD><D0BB>ã<EFBFBD><C3A3><EFBFBD>Ҫ<EFBFBD>ⲿָ<E2B2BF><D6B8><EFBFBD><EFBFBD>
//<2F><>Ϊfeetʱ<74><CAB1><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ת<EFBFBD><D7AA>Ϊmeters
CRowCol m_rowcol; //<2F>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>inline=row, crossline=col
CPoint2D m_coor; //<2F><><EFBFBD><EFBFBD><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><E6A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λʱ<CEBB><CAB1><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
};
//SegY<67><59>ʽ<EFBFBD>ĵ<EFBFBD>ͷ<EFBFBD><CDB7>ռ<EFBFBD><D5BC>240<34><30><EFBFBD>ֽ<EFBFBD>
class AFX_EXT_CLASS CSeisTraceHeader
{
public:
CSeisTraceHeader(void);
~CSeisTraceHeader(void);
int ReadHeader(CFileSegy& fr);
void Initialize(void); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B6A8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>ȡͷ<C8A1><CDB7><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>
CSeisTraceInfo& GetTraceInfo() { return traceInfo; }
int GetSampleNumber() { return traceInfo.sample_num; }
double GetSampleInterval() { return traceInfo.sample_interval; }
double GetScale(CBinaryPosition& bp);
BYTE* GetBytes(CBinaryPosition& bp);
inline BYTE* GetBytes(int offset, int len) { return m_byHeader + offset; }
inline BYTE* GetHeader() { return m_byHeader; };
void operator=(CSeisTraceHeader& dbf);
int Read(CFile& fr, const short& ver);
void Write(CFile& fw, const short& ver);
void Serialize(CArchive& ar, const short &ver);
void ClonePositon(CSeisTraceHeader& sth); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
//λ<>ö<EFBFBD><C3B6><EFBFBD>
CBinaryPosition m_bpx; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>X<EFBFBD><58><EFBFBD><EFBFBD>
CBinaryPosition m_bpy; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Y<EFBFBD><59><EFBFBD><EFBFBD>
CBinaryPosition m_bpz; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Z<EFBFBD><5A><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>Ϣ<EFBFBD><CFA2>һ<EFBFBD><D2BB>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7>ֻ<EFBFBD><D6BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
CBinaryPosition m_bpRow; //<2F>ߺ<EFBFBD>λ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
CBinaryPosition m_bpCol; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
CBinaryPosition m_bpScale; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
protected:
BYTE m_byHeader[240];
CSeisTraceInfo traceInfo; //<2F><>ȡ<EFBFBD><C8A1>ͷ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
};
}
using namespace NSeis;