All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Static Public Member Functions | Public Attributes
GeopsyCore::PasscalSegYHeader Class Reference

Brief description of class still missing. More...

#include <PasscalSegYHeader.h>

List of all members.

Public Member Functions

Signal::Components component () const
double deltaT () const
int nSamples () const
 PasscalSegYHeader ()
void read (QDataStream &s)
int sampleSize () const
DateTime t0 () const
DateTime timePick () const
void write (QDataStream &s) const

Static Public Member Functions

static SignalFileFormat determineByteOrder (QString fileName)

Public Attributes

union {
   struct {
      char   channelName [4]
      qint32   channelNumber
      qint16   coordinateScale
      qint16   coordinateUnit
      qint16   dataFormat
      qint16   day
      qint16   elevationScale
      qint32   eventNumber
      qint16   gainConstant
      qint16   gainType
      qint16   hour
      qint32   ignored0 [3]
      qint16   ignored1 [3]
      qint32   ignored2 [8]
      qint32   ignored3 [4]
      qint16   ignored4 [6]
      qint16   ignored5 [5]
      qint16   ignored6 [17]
      qint16   ignored7 [6]
      qint16   ignored8
      quint16   instrumentSerialNumber
      qint32   maximumAmplitude
      qint16   milliseconds
      qint32   minimumAmplitude
      qint16   minute
      quint16   sampleInterval16
      qint32   sampleInterval32
      quint16   sampleNumber16
      qint32   sampleNumber32
      float   scaleFactor
      qint16   second
      char   sensorSerial [8]
      char   stationName [6]
      qint16   timeBase
      qint16   totalStaticCorrectionHigh
      qint16   totalStaticCorrectionLow
      qint16   traceIndentificationCode
      qint32   traceNumberInFile
      qint32   traceNumberInReel
      qint16   triggerDay
      qint16   triggerHour
      qint16   triggerMilliseconds
      qint16   triggerMinute
      qint16   triggerSecond
      qint16   triggerYear
      qint16   year
   }   field
   struct {
      qint32   raw0 [7]
      qint16   raw1 [4]
      float   raw10
      qint16   raw11 [2]
      qint32   raw12 [3]
      qint32   raw2 [8]
      qint16   raw3 [2]
      qint32   raw4 [4]
      qint16   raw5 [46]
      char   raw6 [18]
      qint16   raw7
      qint32   raw8
      qint16   raw9 [8]
   }   raw
}; 

Detailed Description

Brief description of class still missing.

(from src/include/segy.h in passcal software) The PASSCAL SEGY trace format is a modified form of the SEG-Y trace format. The modification comes is because we use some of the unspecified header words to store information pertinent to the PASSCAL data. The data values for each trace are preceded by a 240 byte header. This format is given below. All integer values are stored with the most significant byte first (big endian). Data values are either 16 0r 32 bit integers depending on byte 206 of the header, the field named "data_form".

PASSCAL SEGY format is also described in many reports that can be downloaded from IRIS: http://dmc.iris.washington.edu/data One example is http://dmc.iris.washington.edu/data/reports/1999/99-002B.pdf


Constructor & Destructor Documentation

Description of constructor still missing

References TRACE.

{
  TRACE;
  ASSERT(sizeof( PasscalSegYHeader)==240);
  memset(this, 0, 240);
}

Member Function Documentation

References GeopsyCore::Signal::East, field, GeopsyCore::Signal::North, TRACE, GeopsyCore::Signal::UndefinedComponent, and GeopsyCore::Signal::Vertical.

{
  TRACE;
  switch(field.channelNumber) {
  case 1:
  case 4:
    return Signal::Vertical;
  case 2:
  case 5:
    return Signal::North;
  case 3:
  case 6:
    return Signal::East;
  default:
    return Signal::UndefinedComponent;
  }
}
double GeopsyCore::PasscalSegYHeader::deltaT ( ) const [inline]
{return field.sampleInterval16==1 ? 1e-6*field.sampleInterval32 : 1e-6*field.sampleInterval16;}

References QGpCoreTools::endl(), GeopsyCore::SignalFileFormat::PasscalSegYBigEndian, GeopsyCore::SignalFileFormat::PasscalSegYLittleEndian, QGpCoreTools::tr(), TRACE, and GeopsyCore::SignalFileFormat::Unknown.

Referenced by GeopsyCore::SignalFileFormat::fromContent(), and GeopsyCore::SignalFileFormat::fromSuffix().

{
  TRACE;
  QFile f(fileName);
  if( !f.open(QIODevice::ReadOnly) ) {
    return SignalFileFormat::Unknown;
  }
  QDataStream s(&f);
#if(QT_VERSION >= QT_VERSION_CHECK(4, 6, 0))
  s.setFloatingPointPrecision(QDataStream::SinglePrecision);
#endif
  s.setByteOrder(QDataStream::LittleEndian);
  bool littleEndian=canReadAll(s, f.size());
  f.seek(0);
  s.setByteOrder(QDataStream::BigEndian);
  bool bigEndian=canReadAll(s, f.size());
  if((littleEndian && bigEndian) || (!littleEndian && !bigEndian)) {
    App::stream() << tr("Cannot determine byte order for PASSCAL SEGY format.") << endl;
    return SignalFileFormat::Unknown;
  } else if(littleEndian) {
    return SignalFileFormat::PasscalSegYLittleEndian;
  } else {
    return SignalFileFormat::PasscalSegYBigEndian;
  }
}
{return field.sampleNumber16==32767 ? field.sampleNumber32 : field.sampleNumber16;}
void GeopsyCore::PasscalSegYHeader::read ( QDataStream &  s)

References raw, and TRACE.

{
  TRACE;
  for(int i=0;i<7;i++) s >> raw.raw0[i];
  for(int i=0;i<4;i++) s >> raw.raw1[i];
  for(int i=0;i<8;i++) s >> raw.raw2[i];
  for(int i=0;i<2;i++) s >> raw.raw3[i];
  for(int i=0;i<4;i++) s >> raw.raw4[i];
  for(int i=0;i<46;i++) s >> raw.raw5[i];
  s.readRawData(raw.raw6, 18);
  s >> raw.raw7;
  s >> raw.raw8;
  for(int i=0;i<8;i++) s >> raw.raw9[i];
  s >> raw.raw10;
  for(int i=0;i<2;i++) s >> raw.raw11[i];
  for(int i=0;i<3;i++) s >> raw.raw12[i];
}
{return field.dataFormat==0 ? 2 : 4;}

References QGpCoreTools::DateTime::addDays(), QGpCoreTools::DateTime::addSeconds(), field, and TRACE.

{
  TRACE;
  DateTime t(QDateTime(QDate(field.year , 1, 1), QTime(field.hour, field.minute, field.second)));
  t.addDays(field.day-1);
  t.addSeconds(0.001*field.milliseconds);
  return t;
}

References QGpCoreTools::DateTime::addDays(), QGpCoreTools::DateTime::addSeconds(), field, and TRACE.

{
  TRACE;
  DateTime t(QDateTime(QDate(field.triggerYear , 1, 1), QTime(field.triggerHour, field.triggerMinute, field.triggerSecond)));
  t.addDays(field.triggerDay-1);
  t.addSeconds(0.001*field.triggerMilliseconds);
  return t;
}
void GeopsyCore::PasscalSegYHeader::write ( QDataStream &  s) const

References raw, and TRACE.

{
  TRACE;
  for(int i=0;i<7;i++) s << raw.raw0[i];
  for(int i=0;i<4;i++) s << raw.raw1[i];
  for(int i=0;i<8;i++) s << raw.raw2[i];
  for(int i=0;i<2;i++) s << raw.raw3[i];
  for(int i=0;i<4;i++) s << raw.raw4[i];
  for(int i=0;i<46;i++) s << raw.raw5[i];
  s.writeRawData(raw.raw6, 18);
  s << raw.raw7;
  s << raw.raw8;
  for(int i=0;i<8;i++) s << raw.raw9[i];
  s << raw.raw10;
  for(int i=0;i<2;i++) s << raw.raw11[i];
  for(int i=0;i<3;i++) s << raw.raw12[i];
}

Member Data Documentation

union { ... }

Referenced by component(), t0(), and timePick().

Referenced by read(), and write().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines