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.

128 lines
3.6 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD>: SegY<67>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2011-4-1
//
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "databuffer.h"
#include "SeisFileHeader.h"
#include "TInterval.h"
namespace NSeis
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʽ
enum EUniformType
{
ufoTypeNone = 0,
ufoTypeRMS = 1, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ufoTypeAvg, //ƽ<><C6BD>ֵ
ufoTypeMax, //<2F><><EFBFBD><EFBFBD>ֵ
};
//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class AFX_EXT_CLASS CSeisTraceDataInfo
{
public:
CSeisTraceDataInfo()
{
m_dMaxValue = 0; //<2F><><EFBFBD><EFBFBD>ֵ
m_dMinValue = 0; //<2F><>Сֵ
m_dRms = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
m_dAverage = 0; //ƽ<><C6BD>ֵ
}
double m_dMaxValue; //<2F><><EFBFBD><EFBFBD>ֵ
double m_dMinValue; //<2F><>Сֵ
double m_dRms; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
double m_dAverage; //ƽ<><C6BD>ֵ
//double m_dSum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//double m_dSumSquare; //<2F><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
//double m_dSumSquareW; //<2F><><EFBFBD><EFBFBD>Ȩ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
//double m_dMedian; //<2F><>ֵ
//<2F><><EFBFBD>ù<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double GetUniformFactor(EUniformType ut);
};
//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class AFX_EXT_CLASS CSeisTraceData : public CDataBuffer
{
public:
CSeisTraceData(void);
~CSeisTraceData(void);
void Create(int num, int samBytes);
void Create(int num, CFileSegy::EDataType dt);
void Attach(BYTE* pData, int nSampleNum, int nSampleBytes);
void Attach(BYTE* pData, int nSampleNum, CFileSegy::EDataType dt);
virtual void Clear(void);
void Serialize(CArchive& ar, const short &ver);
CSeisTraceData& operator=(CSeisTraceData& dbf);
CSeisTraceDataInfo& GetDataInfo() { return dataInfo; }
void SetDataInfo(CSeisTraceDataInfo& di) { dataInfo = di; }
void RestatDataInfo(CFileSegy::EDataType& dt); //<2F><><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>m_dataInfo<66><6F>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Read<61>н<EFBFBD><D0BD><EFBFBD>
inline double GetValue(int nIndex, CFileSegy::EDataType& dt); //<2F><><EFBFBD>øõ<C3B8><C3B5>е<EFBFBD>nIndex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void QuickSort(CFileSegy::EDataType& dt);
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>SegYΪ<59>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>ʱ
enum EOutType
{
outTypeCurve = 1, //˫<><CBAB><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD>ʽ<EFBFBD><CABD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><59><CAB1>
outTypeTV, //δƥ<CEB4><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6>׸<EFBFBD>ʽ
outTypeStationV, //ƥ<><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6>׸<EFBFBD>ʽ
outTypeXYTA, //<2F><><EFBFBD><EFBFBD>(XY)<29><>ʱ<EFBFBD><CAB1>(T)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(A)
outTypeXYICTA, //<2F><><EFBFBD><EFBFBD>(XY)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(I)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(C)<29><>ʱ<EFBFBD><CAB1>(T)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(A)
};
//<2F><><EFBFBD><EFBFBD>CSeisTraceHeader<65>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>
//<2F><><EFBFBD><EFBFBD>TIntervalStep<65><70>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <= <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= <20><><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>-1
//<2F><><EFBFBD><EFBFBD>bRemoveBeginZero<72><6F><EFBFBD>Ƿ<EFBFBD><C7B7>Ƴ<EFBFBD><C6B3><EFBFBD>ʼ<EFBFBD><CABC>0<EFBFBD><30><EFBFBD><EFBFBD>
void Write( CFile& fw, CSeisTraceInfo& sti, TIntervalStep<int> ts,
EOutType wt, CFileSegy::EDataType& dt, bool bRemoveBeginZero ); //<2F><><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>Χ
void Write( CFile& fw, CSeisTraceInfo& sti, TIntervalStep<double> ts,
EOutType wt, CFileSegy::EDataType& dt, double offsetTime, bool bRemoveBeginZero ); //ʱ<>Χ<E4B7B6><CEA7><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ֵ
void Write( CFile& fw, double sample_interval, TIntervalStep<int> ts,
double offsetTime, EOutType wt, CFileSegy::EDataType& dt, bool bRemoveBeginZero );
////////////////////////////////////////////////////////////////
CRowCol m_rowcol; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>
CPoint2D m_coor; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊfloat<61><74>
CSeisTraceDataInfo dataInfo;
};
inline double CSeisTraceData::GetValue(int nIndex, CFileSegy::EDataType& dt)
{
switch(dt)
{
case CFileSegy::typeIbmGainLong:
case CFileSegy::typeIbmFloat:
case CFileSegy::typeIeeFloat: return GetDataFloat()[nIndex];
case CFileSegy::typeIbmShort:
case CFileSegy::typeIeeShort: return GetDataShort()[nIndex];
case CFileSegy::typeIbmLong:
case CFileSegy::typeIeeLong: return GetDataLong()[nIndex];
case CFileSegy::typeIeeDouble: return GetDataDouble()[nIndex];
case CFileSegy::typeChar: return GetDataChar()[nIndex];
}
return 0.0;
}
}//namespace
using namespace NSeis;