#include <CompatHodoChroneData.h>
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) |
default constructor
:
CompatHodoChrone(), CompatMultiModalData() {}
| QGpCompatibility::CompatHodoChroneData::CompatHodoChroneData | ( | int | modesCount, |
| int | omegasCount | ||
| ) | [inline] |
Allocates an empty structure.
| QGpCompatibility::CompatHodoChroneData::CompatHodoChroneData | ( | const CompatHodoChroneData * | o, |
| int | modesCount | ||
| ) | [inline] |
Allocates an empty structure based on an existing one with another number of modes.
| QGpCompatibility::CompatHodoChroneData::CompatHodoChroneData | ( | const CompatMultiModalCurves * | o | ) | [inline] |
Set the values o as the measurements.
:
CompatHodoChrone(o),
CompatMultiModalData(o) {}
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();
}
| void QGpCompatibility::CompatHodoChroneData::setSource | ( | QString | srcFile | ) |
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;
}
}
}
| int QGpCompatibility::CompatHodoChroneData::srcIndex | ( | int | iSrc | ) |
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;
}
| void QGpCompatibility::CompatHodoChroneData::valuesToData | ( | ) | [inline] |
References QGpCompatibility::CompatMultiModalData::valuesToData().
{CompatMultiModalData::valuesToData(this);}
| void QGpCompatibility::CompatHodoChroneData::valuesToData | ( | CompatMultiModalCurves * | o | ) | [inline] |
Reimplemented from QGpCompatibility::CompatMultiModalData.
References QGpCompatibility::CompatMultiModalData::valuesToData().