All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions
QGpCompatibility::CompatHodoChroneData Class Reference

#include <CompatHodoChroneData.h>

Inheritance diagram for QGpCompatibility::CompatHodoChroneData:
QGpCompatibility::CompatHodoChrone QGpCompatibility::CompatMultiModalData QGpCompatibility::CompatMultiModalCurves QGpCompatibility::CompatMultiModalFrequency

List of all members.

Public Member Functions

void calculate (RefractionDippingModel &model)
 CompatHodoChroneData ()
 default constructor
 CompatHodoChroneData (int modesCount, int omegasCount)
 Allocates an empty structure.
 CompatHodoChroneData (const CompatHodoChroneData *o, int modesCount)
 Allocates an empty structure based on an existing one with another number of modes.
 CompatHodoChroneData (const CompatMultiModalCurves *o)
 Set the values o as the measurements.
void setSource (QString srcFile)
int srcIndex (int iSrc)
void valuesToData ()
void valuesToData (CompatMultiModalCurves *o)

Constructor & Destructor Documentation

default constructor

QGpCompatibility::CompatHodoChroneData::CompatHodoChroneData ( int  modesCount,
int  omegasCount 
) [inline]

Allocates an empty structure based on an existing one with another number of modes.

Set the values o as the measurements.


Member Function Documentation

References QGpCompatibility::CompatMultiModalData::_measurements, QGpCompatibility::CompatMultiModalData::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegas, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, QGpCompatibility::CompatMultiModalData::_omegasCount, QGpCompatibility::CompatMultiModalCurves::_values, QGpCoreWave::RefractionDippingModel::begin(), CompatHODOCHRONE_INVALID_VALUE, QGpCoreWave::RefractionDippingModel::end(), QGpCoreWave::TiltNode::init(), QGpCompatibility::CompatMultiModalData::measurements(), QGpCoreWave::RefractionDippingModel::setXLeft(), QGpCoreWave::RefractionDippingModel::setXRight(), srcIndex(), TRACE, QGpCoreWave::RefractionDippingModel::travelTime(), and QGpCompatibility::CompatMultiModalCurves::value().

{
  TRACE;
  model.setXLeft(_omegas[0]);
  model.setXRight(_omegas[CompatMultiModalFrequency::_omegasCount-1]);
  model.begin();
  TiltNode * nodes=new TiltNode [CompatMultiModalFrequency::_omegasCount];
  for(int iRec=0;iRec<CompatMultiModalFrequency::_omegasCount;iRec++) {
    nodes[iRec].init(_omegas[iRec],model);
  }
  
  int minTimeLayer;
  for(int iSrc=0;iSrc<CompatMultiModalFrequency::_modesCount;iSrc++) {
    double * measurements=_measurements[iSrc];
    double * value=_values[iSrc];
    int omegaISrc=srcIndex(iSrc);
    // Go towards negative receivers
    if(omegaISrc>0) {
      for(int iRec=0;iRec<omegaISrc;iRec++) {
        if(measurements[iRec]!=CompatHODOCHRONE_INVALID_VALUE) {
          value[iRec]=
              model.travelTime(nodes[omegaISrc], nodes[iRec], minTimeLayer);
         }
        else value[iRec]=CompatHODOCHRONE_INVALID_VALUE;
      }
    }
    value[omegaISrc]=0;
    // Go towards positive receivers
    if(omegaISrc<CompatMultiModalFrequency::_omegasCount-1) {
      for(int iRec=omegaISrc+1;iRec<CompatMultiModalFrequency::_omegasCount;iRec++) {
        if(measurements[iRec]!=CompatHODOCHRONE_INVALID_VALUE) {
          value[iRec]=
              model.travelTime(nodes[omegaISrc], nodes[iRec], minTimeLayer);
        }
        else value[iRec]=CompatHODOCHRONE_INVALID_VALUE;
      }
    }
  }
  delete [] nodes;
  model.end();
}

References QGpCompatibility::CompatMultiModalData::_measurements, QGpCompatibility::CompatMultiModalData::_modesCount, QGpCompatibility::CompatMultiModalFrequency::_omegasCount, QGpCompatibility::CompatMultiModalData::_omegasCount, QGpCompatibility::CompatMultiModalData::measurements(), srcIndex(), str, and TRACE.

{
  TRACE;
  QFile f(srcFile);
  if(!f.open(QIODevice::ReadOnly)) {
    fprintf(stderr," *** ERROR *** Cannot open source file\n");
    return;
  }
  QTextStream s(&f);
  QString str;
  int iSrc=0;
  for(iSrc=0;iSrc<CompatMultiModalFrequency::_modesCount;iSrc++) {
    double * measurements=_measurements[iSrc];
    for(int i=0;i<CompatMultiModalFrequency::_omegasCount;i++)
      measurements[i]=1;
  }
  iSrc=0;
  while(!s.atEnd()) {
    str=s.readLine().trimmed();
    if(!str.isEmpty() && str.left(1)!="#") {
      int srcIndex=str.section(QRegExp("[ \t]"),0,0).toInt();
      if(srcIndex>=0 && srcIndex<CompatMultiModalFrequency::_omegasCount)
        _measurements[iSrc][srcIndex]=0;
      else
        fprintf(stderr,"Receiver index out of range in CompatHodoChroneData::setSource\n");
      iSrc++;
      if(iSrc>=CompatMultiModalFrequency::_modesCount) break;
    }
  }  
}

References QGpCompatibility::CompatMultiModalData::_measurements, QGpCompatibility::CompatMultiModalData::_omegasCount, QGpCompatibility::CompatMultiModalData::measurements(), and TRACE.

Referenced by calculate(), and setSource().

{
  TRACE;
  double * measurements=_measurements[iSrc];
  for(int i=0;i<CompatMultiModalFrequency::_omegasCount;i++) {
    if(measurements[i]==0) return i;
  }
  fprintf(stderr,"Error in CompatHodoChroneData no source location defined");
  return 0;
}

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