#include <CompatRefraReport.h>
Public Member Functions | |
| void | addRefraGoal (CompatHodoChroneData *hd) |
| CompatRefraReport (bool isWrite, QString reportFile, QString naInFile=QString::null, int nModels=0) | |
| CompatHodoChrone * | currentHodoChrone () |
| Returns the autocorr curves of current model. | |
| RefractionDippingModel * | currentTiltModel () |
| virtual bool | isA (const char *className) |
| Test whether this class is of type className. | |
| void | loadRefra (int modelIndex) |
| load the model, the cost, the hodochrone curve | |
| void | loadRefra (CompatHodoChrone *hodo, int modelIndex) |
| CompatHodoChroneData * | loadRefraGoal () |
| void | modifyRefraGoal (CompatHodoChroneData *rms) |
| ~CompatRefraReport () | |
Protected Member Functions | |
| virtual bool | initCurrentDispersion () |
| initialize current dispersion object | |
| void | initCurrentTiltModel () |
Protected Attributes | |
| RefractionDippingModel * | _currentTiltModel |
| QGpCompatibility::CompatRefraReport::CompatRefraReport | ( | bool | isWrite, |
| QString | reportFile, | ||
| QString | naInFile = QString::null, |
||
| int | nModels = 0 |
||
| ) |
References QGpCompatibility::CompatInversionReport::_currentDispersion, _currentTiltModel, and TRACE.
: CompatInversionReport(isWrite,reportFile,naInFile,nModels) { TRACE; _currentTiltModel=0; if(!isWrite) { // Force _currentDispersion to be a CompatHodoChrone delete _currentDispersion; _currentDispersion=0; } }
References _currentTiltModel, and TRACE.
{
TRACE;
delete _currentTiltModel;
}
References QGpCompatibility::CompatInversionReport::_blockOmegas, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatMultiModalData::dataToReport(), QGpCompatibility::CompatInversionReport::endWritingBlock(), QGpCompatibility::CompatInversionReport::Omegas, QGpCompatibility::CompatInversionReport::RefraGoal, QGpCompatibility::CompatInversionReport::startReadingBlock(), QGpCompatibility::CompatInversionReport::startWritingBlock(), and TRACE.
{
TRACE;
// tests if omegas are entered
if(!startReadingBlock(_blockOmegas,Omegas)) {
fprintf(stderr,"You must call addOmegas before calling addRefraGoal\n");
return;
}
startWritingBlock(RefraGoal);
if(hd) hd->dataToReport(_s);
endWritingBlock();
}
Returns the autocorr curves of current model.
References QGpCompatibility::CompatInversionReport::_currentDispersion, loadRefra(), and TRACE.
{
TRACE;
if(!_currentDispersion) loadRefra(0);
return (CompatHodoChrone *)_currentDispersion;
}
References _currentTiltModel, initCurrentTiltModel(), and TRACE.
{
TRACE;
if(!_currentTiltModel) initCurrentTiltModel();
return _currentTiltModel;
}
| bool QGpCompatibility::CompatRefraReport::initCurrentDispersion | ( | ) | [protected, virtual] |
initialize current dispersion object
Reimplemented from QGpCompatibility::CompatInversionReport.
References QGpCompatibility::CompatInversionReport::_blockEll, QGpCompatibility::CompatInversionReport::_blockOmegas, QGpCompatibility::CompatInversionReport::_currentDispersion, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_trueN, QGpCompatibility::CompatInversionReport::_version, QGpCompatibility::CompatInversionReport::EllipticityGoal, QGpCompatibility::CompatInversionReport::initCurrentEllipticity(), QGpCompatibility::CompatMultiModalFrequency::modesCount(), MSG_ID, QGpCompatibility::CompatInversionReport::Omegas, QGpCompatibility::CompatMultiModalCurves::reportToOmega(), QGpCompatibility::CompatMultiModalCurves::setRayleighModesCount(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
Referenced by loadRefra(), and loadRefraGoal().
{
TRACE;
ASSERT(!_currentDispersion);
_currentDispersion=(CompatMultiModalCurves *) new CompatHodoChrone();
if(startReadingBlock(_blockOmegas,Omegas))
_currentDispersion->reportToOmega(_s);
else {
Message::critical(MSG_ID,"Inversion report", "Bad block: Omegas at index 1",Message::cancel());
return false;
}
if(_trueN>_blockEll && startReadingBlock(_blockEll,EllipticityGoal))
if(!initCurrentEllipticity()) return false;
if(_version<2)
_currentDispersion->setRayleighModesCount(_currentDispersion->modesCount());
return true;
}
| void QGpCompatibility::CompatRefraReport::initCurrentTiltModel | ( | ) | [protected] |
References QGpCompatibility::CompatInversionReport::_currentModel, _currentTiltModel, QGpCompatibility::CompatInversionReport::initCurrentModel(), QGpCoreWave::Seismic1DModel::layerCount(), and TRACE.
Referenced by currentTiltModel(), and loadRefra().
{
TRACE;
if(!_currentModel) initCurrentModel();
_currentTiltModel=new RefractionDippingModel(_currentModel->layerCount());
}
| bool QGpCompatibility::CompatRefraReport::isA | ( | const char * | className | ) | [virtual] |
Test whether this class is of type className.
Reimplemented from QGpCompatibility::CompatInversionReport.
References TRACE.
| void QGpCompatibility::CompatRefraReport::loadRefra | ( | int | modelIndex | ) |
load the model, the cost, the hodochrone curve
References QGpCompatibility::CompatInversionReport::_currentCost, QGpCompatibility::CompatInversionReport::_currentDispersion, QGpCompatibility::CompatInversionReport::_currentID, QGpCompatibility::CompatInversionReport::_currentModel, QGpCompatibility::CompatInversionReport::_currentNAModel, _currentTiltModel, QGpCompatibility::CompatInversionReport::_headerBlocksCount, QGpCompatibility::CompatInversionReport::_nd, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, QGpCoreWave::Seismic1DModel::fromStream(), initCurrentDispersion(), initCurrentTiltModel(), QGpCompatibility::CompatInversionReport::ModelDispersion, QGpCompatibility::CompatMultiModalCurves::reportToRefines(), QGpCompatibility::CompatMultiModalCurves::reportToValues(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
Referenced by currentHodoChrone().
{
TRACE;
if(!_currentTiltModel) initCurrentTiltModel();
if(!_currentNAModel) _currentNAModel=new float [_nd];
if(!_currentDispersion) initCurrentDispersion();
if(startReadingBlock(modelIndex+_headerBlocksCount,ModelDispersion)) {
_s >> _currentID;
_currentModel->fromStream(_s);
//_currentTiltModel->set(_currentModel);
_s >> _currentCost;
if(_version>=4) _s.readRawData((char *)_currentNAModel,_nd*sizeof(float));
_currentDispersion->reportToValues(_s);
if(_version>0) _currentDispersion->reportToRefines(_s);
//_currentTiltModel->reportToSpec(_s);
}
else _currentCost=-1;
}
| void QGpCompatibility::CompatRefraReport::loadRefra | ( | CompatHodoChrone * | hodo, |
| int | modelIndex | ||
| ) |
References QGpCompatibility::CompatInversionReport::_blockOmegas, QGpCompatibility::CompatInversionReport::_currentCost, QGpCompatibility::CompatInversionReport::_currentDispersion, QGpCompatibility::CompatInversionReport::_currentID, QGpCompatibility::CompatInversionReport::_currentModel, QGpCompatibility::CompatInversionReport::_currentNAModel, _currentTiltModel, QGpCompatibility::CompatInversionReport::_headerBlocksCount, QGpCompatibility::CompatInversionReport::_nd, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, QGpCoreWave::Seismic1DModel::fromStream(), initCurrentDispersion(), initCurrentTiltModel(), QGpCompatibility::CompatInversionReport::ModelDispersion, QGpCompatibility::CompatInversionReport::Omegas, QGpCompatibility::CompatMultiModalCurves::reportToOmega(), QGpCompatibility::CompatMultiModalCurves::reportToRefines(), QGpCompatibility::CompatMultiModalCurves::reportToValues(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
{
TRACE;
if(!_currentTiltModel) initCurrentTiltModel();
if(!_currentNAModel) _currentNAModel=new float [_nd];
if(!_currentDispersion) initCurrentDispersion();
if(startReadingBlock(_blockOmegas,Omegas)) {
hodo->reportToOmega(_s);
if(startReadingBlock(modelIndex+_headerBlocksCount,ModelDispersion)) {
_s >> _currentID;
_currentModel->fromStream(_s);
//_currentTiltModel->set(_currentModel);
_s >> _currentCost;
if(_version>=4) _s.readRawData((char *)_currentNAModel,_nd*sizeof(float));
hodo->reportToValues(_s);
if(_version>=1) hodo->reportToRefines(_s);
}
else _currentCost=-1;
}
else _currentCost=-1;
}
References QGpCompatibility::CompatInversionReport::_blockGoal, QGpCompatibility::CompatInversionReport::_currentDispersion, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, initCurrentDispersion(), QGpCompatibility::CompatInversionReport::RefraGoal, QGpCompatibility::CompatMultiModalData::reportToData(), QGpCompatibility::CompatMultiModalData::reportToDataWeight(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
{
TRACE;
if(!_currentDispersion) initCurrentDispersion();
CompatHodoChroneData * rms=new CompatHodoChroneData(_currentDispersion);
if(startReadingBlock(_blockGoal,RefraGoal)) {
rms->reportToData(_s);
rms->reportToDataWeight(_s,_version>=3);
}
else fprintf(stderr,"Unable to read block RefraGoal in current file\n");
return rms;
}
Re-writing over the existing goal curves, extrem caution may be observe to the size of the new CompatHodoChroneData: it must be exactly the same structure as the one added with addRefraGoal(), only some changes in the values are tolerated
References QGpCompatibility::CompatInversionReport::_blockGoal, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatMultiModalData::dataToReport(), QGpCompatibility::CompatInversionReport::endWritingBlock(), QGpCompatibility::CompatInversionReport::RefraGoal, QGpCompatibility::CompatInversionReport::startWritingBlock(), and TRACE.
{
TRACE;
startWritingBlock(_blockGoal,RefraGoal);
if(hd) hd->dataToReport(_s);
endWritingBlock();
}
Referenced by CompatRefraReport(), currentTiltModel(), initCurrentTiltModel(), loadRefra(), and ~CompatRefraReport().