#include <CompatAutocorrReport.h>
Public Member Functions | |
void | addAutocorrGoal (CompatAutocorrData *ad) |
void | addModel (const Seismic1DModel *model, float *naModel, const CompatDispersion *disp, const CompatAutocorrCurves *ac, double cost, int modelID=-1) |
Add all block in one time with extension of autocorr curves. | |
void | addModel (const Seismic1DModel *model, float *naModel, const CompatDispersion *disp, const CompatEllipticity *ell, const CompatAutocorrCurves *ac, double cost, int modelID=-1) |
Add all block in one time with extension of autocorr curves. | |
CompatAutocorrReport (bool isWrite, QString reportFile, QString naInFile=QString::null, int nModels=0) | |
Constructor: open file. | |
CompatAutocorrCurves * | currentAutocorr () |
Returns the autocorr curves of current model. | |
virtual bool | isA (const char *className) |
Test whether this class is of type className. | |
bool | loadAutocorr (int modelIndex) |
load the model, the cost, he dispersion curve and the autocorr curve | |
bool | loadAutocorr (CompatAutocorrCurves *ac, int modelIndex) |
Same as above except that it loads the dispersion curve in a given dispersion object. | |
CompatAutocorrData * | loadAutocorrGoal () |
load the measured autocorr curves into a new autocorrData class | |
bool | loadAutocorrOnly (int modelIndex) |
load the autocorr curve only | |
void | modifyAutocorrGoal (CompatAutocorrData *rms) |
int | radiusCount () |
~CompatAutocorrReport () | |
Protected Member Functions | |
bool | initCurrentAutocorr () |
initialize current autocorrCurves object | |
Protected Attributes | |
CompatAutocorrCurves * | _currentAutocorr |
Last autocorr object loaded from stream. |
QGpCompatibility::CompatAutocorrReport::CompatAutocorrReport | ( | bool | isWrite, |
QString | reportFile, | ||
QString | naInFile = QString::null , |
||
int | nModels = 0 |
||
) |
Constructor: open file.
References _currentAutocorr, and TRACE.
: CompatInversionReport(isWrite, reportFile, naInFile, nModels) { TRACE; _currentAutocorr=0; }
References _currentAutocorr, and TRACE.
{ TRACE; delete _currentAutocorr; }
References QGpCompatibility::CompatInversionReport::_blockOmegas, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::AutocorrGoal, QGpCompatibility::CompatAutocorrData::dataToReport(), QGpCompatibility::CompatInversionReport::endWritingBlock(), QGpCompatibility::CompatInversionReport::Omegas, QGpCompatibility::CompatAutocorrCurves::rayleighModesCount(), 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 addDispersionGoal\n" ); return ; } startWritingBlock(AutocorrGoal); if(ad) { _s << ad->rayleighModesCount(); ad->dataToReport(_s); } endWritingBlock(); }
void QGpCompatibility::CompatAutocorrReport::addModel | ( | const Seismic1DModel * | model, |
float * | naModel, | ||
const CompatDispersion * | disp, | ||
const CompatAutocorrCurves * | ac, | ||
double | cost, | ||
int | modelID = -1 |
||
) |
Add all block in one time with extension of autocorr curves.
References QGpCompatibility::CompatInversionReport::_currentID, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::endWritingBlock(), QGpCompatibility::CompatInversionReport::ModelDispersion, QGpCompatibility::CompatMultiModalCurves::refinesCount(), QGpCompatibility::CompatMultiModalCurves::refinesToReport(), QGpCompatibility::CompatInversionReport::setMaxOmegasCount(), QGpCompatibility::CompatInversionReport::startWritingBlock(), QGpCoreWave::Seismic1DModel::toStream(), TRACE, QGpCompatibility::CompatMultiModalCurves::valuesToReport(), QGpCompatibility::CompatAutocorrCurves::valuesToReport(), and QGpCompatibility::CompatInversionReport::writeNAModel().
{ TRACE; // Write new model at the end of file if(startWritingBlock( ModelDispersion) ) { if(modelID < 0) { _s << _currentID; _currentID++; } else { if(modelID >= _currentID) _currentID=modelID + 1; _s << modelID; } model->toStream(_s); _s << cost; writeNAModel(naModel); disp->valuesToReport(_s); disp->refinesToReport(_s); ac->valuesToReport(_s); } else fprintf(stderr, "Maximum number of models is reached, model not added\n" ); endWritingBlock(); setMaxOmegasCount(disp->refinesCount(), 0); }
void QGpCompatibility::CompatAutocorrReport::addModel | ( | const Seismic1DModel * | model, |
float * | naModel, | ||
const CompatDispersion * | disp, | ||
const CompatEllipticity * | ell, | ||
const CompatAutocorrCurves * | ac, | ||
double | cost, | ||
int | modelID = -1 |
||
) |
Add all block in one time with extension of autocorr curves.
References QGpCompatibility::CompatInversionReport::_currentID, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::endWritingBlock(), QGpCompatibility::CompatInversionReport::ModelDispersion, QGpCompatibility::CompatMultiModalCurves::refinesCount(), QGpCompatibility::CompatMultiModalCurves::refinesToReport(), QGpCompatibility::CompatInversionReport::setMaxOmegasCount(), QGpCompatibility::CompatInversionReport::startWritingBlock(), QGpCoreWave::Seismic1DModel::toStream(), TRACE, QGpCompatibility::CompatMultiModalCurves::valuesToReport(), QGpCompatibility::CompatAutocorrCurves::valuesToReport(), and QGpCompatibility::CompatInversionReport::writeNAModel().
{ TRACE; // Write new model at the end of file if(startWritingBlock( ModelDispersion) ) { if(modelID < 0) { _s << _currentID; _currentID++; } else { if(modelID >= _currentID) _currentID=modelID + 1; _s << modelID; } model->toStream(_s); _s << cost; writeNAModel(naModel); disp->valuesToReport(_s); disp->refinesToReport(_s); ell->valuesToReport(_s); ell->refinesToReport(_s); ac->valuesToReport(_s); } else fprintf(stderr, "Maximum number of models is reached, model not added\n" ); endWritingBlock(); setMaxOmegasCount(disp->refinesCount(), ell->refinesCount()); }
Returns the autocorr curves of current model.
References _currentAutocorr, loadAutocorr(), and TRACE.
{ TRACE; if(!_currentAutocorr) loadAutocorr(0); return _currentAutocorr; }
bool QGpCompatibility::CompatAutocorrReport::initCurrentAutocorr | ( | ) | [protected] |
initialize current autocorrCurves object
References QGpCompatibility::CompatInversionReport::_blockGoal, QGpCompatibility::CompatInversionReport::_blockOmegas, _currentAutocorr, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, QGpCompatibility::CompatInversionReport::AutocorrGoal, QGpCompatibility::CompatMultiModalFrequency::modesCount(), MSG_ID, QGpCompatibility::CompatInversionReport::Omegas, QGpCompatibility::CompatAutocorrCurves::reportToOmega(), QGpCompatibility::CompatAutocorrCurves::reportToRadius(), QGpCompatibility::CompatAutocorrCurves::setRayleighModesCount(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
Referenced by loadAutocorr(), loadAutocorrGoal(), and loadAutocorrOnly().
{ TRACE; ASSERT( !_currentAutocorr); _currentAutocorr=new CompatAutocorrCurves(); if(startReadingBlock( _blockGoal, AutocorrGoal) ) { if(_version >= 2) { uint rayleighModesCount; _s >> rayleighModesCount; _currentAutocorr->setRayleighModesCount(rayleighModesCount); } _currentAutocorr->reportToRadius(_s); if(startReadingBlock( _blockOmegas, Omegas) ) _currentAutocorr->reportToOmega(_s); else { Message::critical(MSG_ID,"Inversion report", "Omegas at index 1", Message::cancel()); return false; } } else Message::critical(MSG_ID,"Inversion report", "Radius at index 2", Message::cancel()); if(_version < 2) _currentAutocorr->setRayleighModesCount(_currentAutocorr->modesCount()); return true; }
bool QGpCompatibility::CompatAutocorrReport::isA | ( | const char * | className | ) | [virtual] |
Test whether this class is of type className.
Reimplemented from QGpCompatibility::CompatInversionReport.
References TRACE.
bool QGpCompatibility::CompatAutocorrReport::loadAutocorr | ( | int | modelIndex | ) |
load the model, the cost, he dispersion curve and the autocorr curve
References _currentAutocorr, QGpCompatibility::CompatInversionReport::_currentCost, QGpCompatibility::CompatInversionReport::_currentDispersion, QGpCompatibility::CompatInversionReport::_currentEllipticity, QGpCompatibility::CompatInversionReport::_currentID, QGpCompatibility::CompatInversionReport::_currentModel, QGpCompatibility::CompatInversionReport::_currentNAModel, QGpCompatibility::CompatInversionReport::_headerBlocksCount, QGpCompatibility::CompatInversionReport::_nd, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, QGpCoreWave::Seismic1DModel::fromStream(), initCurrentAutocorr(), QGpCompatibility::CompatInversionReport::initCurrentDispersion(), QGpCompatibility::CompatInversionReport::initCurrentModel(), QGpCompatibility::CompatInversionReport::ModelDispersion, QGpCompatibility::CompatMultiModalCurves::reportToRefines(), QGpCompatibility::CompatMultiModalCurves::reportToValues(), QGpCompatibility::CompatAutocorrCurves::reportToValues(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
Referenced by currentAutocorr(), and radiusCount().
{ TRACE; if( !_currentModel) initCurrentModel(); if( !_currentNAModel) _currentNAModel=new float [ _nd ]; if( !_currentDispersion) initCurrentDispersion(); if( !_currentAutocorr && !initCurrentAutocorr()) return false; if(startReadingBlock( modelIndex + _headerBlocksCount, ModelDispersion) ) { _s >> _currentID; _currentModel->fromStream(_s); _s >> _currentCost; if(_version >= 4) _s.readRawData(( char * ) _currentNAModel, _nd * sizeof(float) ); _currentDispersion->reportToValues(_s); if(_version > 0) _currentDispersion->reportToRefines(_s); if(_currentEllipticity) { _currentEllipticity->reportToValues(_s); if(_version > 0) _currentEllipticity->reportToRefines(_s); } _currentAutocorr->reportToValues(_s); } else _currentCost=-1; return true; }
bool QGpCompatibility::CompatAutocorrReport::loadAutocorr | ( | CompatAutocorrCurves * | ac, |
int | modelIndex | ||
) |
Same as above except that it loads the dispersion curve in a given dispersion object.
References QGpCompatibility::CompatInversionReport::_blockGoal, QGpCompatibility::CompatInversionReport::_blockOmegas, QGpCompatibility::CompatInversionReport::_currentCost, QGpCompatibility::CompatInversionReport::_currentDispersion, QGpCompatibility::CompatInversionReport::_currentEllipticity, QGpCompatibility::CompatInversionReport::_currentID, QGpCompatibility::CompatInversionReport::_currentModel, QGpCompatibility::CompatInversionReport::_currentNAModel, QGpCompatibility::CompatInversionReport::_headerBlocksCount, QGpCompatibility::CompatInversionReport::_nd, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, QGpCompatibility::CompatInversionReport::AutocorrGoal, QGpCoreWave::Seismic1DModel::fromStream(), QGpCompatibility::CompatInversionReport::initCurrentDispersion(), QGpCompatibility::CompatInversionReport::initCurrentModel(), QGpCompatibility::CompatInversionReport::ModelDispersion, MSG_ID, QGpCompatibility::CompatInversionReport::Omegas, QGpCompatibility::CompatAutocorrCurves::reportToOmega(), QGpCompatibility::CompatAutocorrCurves::reportToRadius(), QGpCompatibility::CompatMultiModalCurves::reportToRefines(), QGpCompatibility::CompatMultiModalCurves::reportToValues(), QGpCompatibility::CompatAutocorrCurves::reportToValues(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
{ TRACE; if( !_currentModel) initCurrentModel(); if( !_currentNAModel) _currentNAModel=new float [ _nd ]; if( !_currentDispersion) initCurrentDispersion(); if(startReadingBlock( _blockGoal, AutocorrGoal) ) { ac->reportToRadius(_s); if(startReadingBlock( _blockOmegas, Omegas) ) { ac->reportToOmega(_s); if(startReadingBlock( modelIndex + _headerBlocksCount, ModelDispersion) ) { _s >> _currentID; _currentModel->fromStream(_s); _s >> _currentCost; if(_version >= 4) _s.readRawData(( char * ) _currentNAModel, _nd * sizeof(float) ); _currentDispersion->reportToValues(_s); if(_version > 0) _currentDispersion->reportToRefines(_s); if(_currentEllipticity) { _currentEllipticity->reportToValues(_s); if(_version > 0) _currentEllipticity->reportToRefines(_s); } ac->reportToValues(_s); } } else { Message::critical(MSG_ID,"Inversion report", "Omegas at index 1", Message::cancel()); return false; } } else { Message::critical(MSG_ID,"Inversion report", "Radius at index 2", Message::cancel()); return false; } return true; }
load the measured autocorr curves into a new autocorrData class
References QGpCompatibility::CompatInversionReport::_blockGoal, _currentAutocorr, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, QGpCompatibility::CompatInversionReport::AutocorrGoal, initCurrentAutocorr(), QGpCompatibility::CompatAutocorrData::reportToData(), QGpCompatibility::CompatAutocorrData::reportToDataWeight(), QGpCompatibility::CompatAutocorrCurves::setRayleighModesCount(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
{ TRACE; if( !_currentAutocorr) initCurrentAutocorr(); CompatAutocorrData * ad=new CompatAutocorrData(_currentAutocorr); if(startReadingBlock( _blockGoal, AutocorrGoal) ) { if(_version >= 2) { uint rayleighModesCount; _s >> rayleighModesCount; ad->setRayleighModesCount(rayleighModesCount); } ad->reportToData(_s); ad->reportToDataWeight(_s, _version >= 3); } else fprintf(stderr, "Unable to read block AutocorrGoal in current file\n" ); return ad; }
bool QGpCompatibility::CompatAutocorrReport::loadAutocorrOnly | ( | int | modelIndex | ) |
load the autocorr curve only
References _currentAutocorr, QGpCompatibility::CompatInversionReport::_currentDispersion, QGpCompatibility::CompatInversionReport::_currentEllipticity, QGpCompatibility::CompatInversionReport::_currentModel, QGpCompatibility::CompatInversionReport::_currentNAModel, QGpCompatibility::CompatInversionReport::_headerBlocksCount, QGpCompatibility::CompatInversionReport::_nd, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::_version, initCurrentAutocorr(), QGpCompatibility::CompatInversionReport::initCurrentDispersion(), QGpCompatibility::CompatInversionReport::initCurrentModel(), QGpCoreWave::Seismic1DModel::layerCount(), QGpCompatibility::CompatInversionReport::ModelDispersion, QGpCompatibility::CompatMultiModalFrequency::modesCount(), QGpCompatibility::CompatMultiModalFrequency::omegasCount(), QGpCompatibility::CompatAutocorrCurves::reportToValues(), QGpCompatibility::CompatInversionReport::startReadingBlock(), and TRACE.
{ TRACE; if( !_currentModel) initCurrentModel(); if( !_currentNAModel) _currentNAModel=new float [ _nd ]; if( !_currentDispersion) initCurrentDispersion(); if( !_currentAutocorr && !initCurrentAutocorr()) return false; if(startReadingBlock( modelIndex + _headerBlocksCount, ModelDispersion) ) { // ID, Model, cost and basic dispersion offset int nRefines; qint64 blockOffset=_s.device() ->pos(); int offset=(_currentDispersion->modesCount() * _currentDispersion->omegasCount() + 4 * _currentModel->layerCount()) * sizeof(double) + 2 * sizeof(int); if(_version >= 4) offset += _nd * sizeof(float); if(_version >= 1) { _s.device() ->seek(blockOffset + offset); _s >> nRefines; offset += sizeof(int) + nRefines * 2 * sizeof(double); } if(_currentEllipticity) { offset += _currentDispersion->modesCount() * _currentDispersion->omegasCount() * sizeof(double); if(_version >= 1) { _s.device() ->seek(blockOffset + offset); _s >> nRefines; offset += sizeof(int) + nRefines * 2 * sizeof(double); } } _s.device() ->seek(blockOffset + offset); _currentAutocorr->reportToValues(_s); } return true; }
Re-writing over the existing goal curves, extrem caution may be observe to the size of the new CompatAutocorrData: it must be exactly the same structure as the one added with addAutocorrGoal(), only some changes in the values are tolerated
References QGpCompatibility::CompatInversionReport::_blockGoal, QGpCompatibility::CompatInversionReport::_s, QGpCompatibility::CompatInversionReport::AutocorrGoal, QGpCompatibility::CompatAutocorrData::dataToReport(), QGpCompatibility::CompatInversionReport::endWritingBlock(), QGpCompatibility::CompatAutocorrCurves::rayleighModesCount(), QGpCompatibility::CompatInversionReport::startWritingBlock(), and TRACE.
{ TRACE; startWritingBlock(_blockGoal, AutocorrGoal); if(ad) { _s << ad->rayleighModesCount(); ad->dataToReport(_s); } endWritingBlock(); }
int QGpCompatibility::CompatAutocorrReport::radiusCount | ( | ) | [inline] |
References _currentAutocorr, loadAutocorr(), QGpCompatibility::CompatAutocorrCurves::radiusCount(), and TRACE.
{ TRACE; if(!_currentAutocorr) loadAutocorr(0); return _currentAutocorr->radiusCount(); }
Last autocorr object loaded from stream.
Referenced by CompatAutocorrReport(), currentAutocorr(), initCurrentAutocorr(), loadAutocorr(), loadAutocorrGoal(), loadAutocorrOnly(), radiusCount(), and ~CompatAutocorrReport().