#include <DCReportBlock.h>
Public Member Functions | |
| bool | autocorr () const |
| DCReportBlock (QDataStream &s) | |
| bool | dispersion () const |
| bool | ellipticity () const |
| bool | magnetoTelluric () const |
| bool | modalStorage (int i) const |
| bool | pitch () const |
| bool | profile (int i) const |
| Resistivity1DModel * | readElectricModel () |
| void | readModalStorages (int nStorages) |
| void | readProfiles (int version) |
| Seismic1DModel * | readSeismicModel () |
| bool | refractionVp () const |
| bool | refractionVs () const |
| bool | res () const |
| bool | rho () const |
| void | setStorageReader (ModalStorageReader *r) |
| ModalStorageReader * | storageReader () const |
| QDataStream & | stream () |
| bool | vp () const |
| bool | vs () const |
| ~DCReportBlock () | |
Static Public Member Functions | |
| static Seismic1DModel * | surfaceWaveModel (const QVector< double > &zProf, QVector< double > &vpProf, const QVector< double > &vsProf, const QVector< double > &rhoProf, const QVector< double > *nuMinProf=0, const QVector< double > *nuMaxProf=0) |
| static Seismic1DModel * | vpModel (const QVector< double > &zProf, const QVector< double > &vpProf) |
| static Seismic1DModel * | vsModel (const QVector< double > &zProf, const QVector< double > &vsProf) |
| static Seismic1DModel * | vspModel (const QVector< double > &zProf, const QVector< double > &vpProf, const QVector< double > &vsProf) |
| static void | write (ReportWriter *report, const TargetList &tl, const Profile *vp=0, const Profile *vs=0, const Profile *rho=0, const Profile *pitch=0, const Profile *res=0) |
| static void | write (ReportWriter *outReport, ReportReader *inReport) |
| static void | writeBeta (ReportWriter *outReport, ReportReader *inReport) |
| static void | writeNaViewer (ReportWriter *outReport, CompatInversionReport *inReport) |
DISP block containing the following sub-blocks:
4 Tag "DISP" 20*8 Offsets to sub-blocks (currently only 9 are in use) 0 if block not available
| DinverDCCore::DCReportBlock::DCReportBlock | ( | QDataStream & | s | ) |
| bool DinverDCCore::DCReportBlock::autocorr | ( | ) | const [inline] |
Referenced by DinverDCGui::AutocorrViewer::hasCurves(), and outputDCModel().
{return profile(6);}
| bool DinverDCCore::DCReportBlock::dispersion | ( | ) | const [inline] |
Referenced by DinverDCGui::DispersionViewer::hasCurves(), and outputDCModel().
{return profile(5);}
| bool DinverDCCore::DCReportBlock::ellipticity | ( | ) | const [inline] |
Referenced by DinverDCGui::EllipticityViewer::hasCurves(), and outputDCModel().
{return profile(7);}
| bool DinverDCCore::DCReportBlock::magnetoTelluric | ( | ) | const [inline] |
Referenced by DinverDCGui::MagnetoTelluricViewer::hasCurves().
{return profile(10);}
| bool DinverDCCore::DCReportBlock::modalStorage | ( | int | i | ) | const [inline] |
References TRACE.
Referenced by DinverDCGui::EllipticityViewer::hasCurves(), outputDCModel(), DinverDCGui::AutocorrViewer::report2plot(), DinverDCGui::DispersionViewer::seekMode(), and DinverDCGui::AutocorrViewer::setSampleCount().
{
TRACE;
if(_modalStorageOffsets[ i ] > 0) {
_s->device()->seek(_modalStorageOffsets[ i ] );
return true;
} else return false;
}
| bool DinverDCCore::DCReportBlock::pitch | ( | ) | const [inline] |
Referenced by outputDCModel(), readSeismicModel(), and reportMode().
{return profile(3);}
| bool DinverDCCore::DCReportBlock::profile | ( | int | i | ) | const [inline] |
References TRACE.
Referenced by DinverDCGui::GroundModelViewer::report2plot(), DinverDCGui::GroundModelViewer::setSampleCount(), and writeBeta().
{
TRACE;
if(_profileOffsets[ i ] > 0) {
_s->device()->seek(_profileOffsets[ i ] );
return true;
} else return false;
}
Reads profiles and build a resistivity layered model according to available profiles.
References QGpCoreWave::Profile::count(), QGpCoreWave::Profile::readReport(), res(), and TRACE.
Referenced by reportMode().
{
TRACE;
Profile resProf;
if(res()) resProf.readReport(*_s);
QVector<double> depths;
if(resProf.count()>0) {
return new Resistivity1DModel(resProf);
} else {
return 0;
}
}
| void DinverDCCore::DCReportBlock::readModalStorages | ( | int | nStorages | ) |
Read the modal storage offset table and cache it
References TRACE.
Referenced by DinverDCGui::EllipticityViewer::hasCurves(), DinverDCGui::DispersionViewer::hasCurves(), outputDCModel(), DinverDCGui::AutocorrViewer::report2plot(), and DinverDCGui::AutocorrViewer::setSampleCount().
{
TRACE;
delete [] _modalStorageOffsets;
_modalStorageOffsets=new qint64[nStorages];
for(int i=0;i<nStorages;i++) stream() >> _modalStorageOffsets[i];
}
| void DinverDCCore::DCReportBlock::readProfiles | ( | int | version | ) |
Read the profile offset table and cache it
References DCREPORTBLOCK_CURRENT_VERSION, QGpCoreTools::endl(), stream(), QGpCoreTools::tr(), and TRACE.
Referenced by DinverDCGui::GroundModelViewer::exportModels(), DinverDCGui::DCModelViewer::loadModels(), DinverDCGui::GroundModelViewer::minMaxProfiles(), outputDCModel(), DinverDCGui::DCModelViewer::rejectModels(), reportMode(), DinverDCGui::DCModelViewer::selectModels(), write(), and writeBeta().
{
TRACE;
switch (version) {
case 0:
case 1:
for(int i=0;i<9;i++)
stream() >> _profileOffsets[i];
for(int i=9;i<20;i++)
_profileOffsets[i]=0;
break;
case 2:
for(int i=0;i<20;i++)
stream() >> _profileOffsets[i];
break;
default:
App::stream() << tr("Report has been produced by a more recent version of this library %1 (current=%2).")
.arg(version).arg(DCREPORTBLOCK_CURRENT_VERSION) << endl;
for(int i=0;i<20;i++)
_profileOffsets[i]=0;
break;
}
}
Reads profiles and build a layered model according to available profiles.
References QGpCoreWave::Profile::count(), QGpCoreWave::Profile::depths(), pitch(), QGpCoreWave::Profile::readReport(), QGpCoreWave::Profile::resample(), rho(), surfaceWaveModel(), QGpCoreTools::unique(), QGpCoreWave::Profile::values(), vp(), vpModel(), vs(), vsModel(), and vspModel().
Referenced by outputDCModel(), and reportMode().
{
// Read all profiles available to produce a full sampling of the depths
Profile vpProf, vsProf, rhoProf, pitchProf;
if(vp()) vpProf.readReport(*_s);
if(vs()) vsProf.readReport(*_s);
if(rho()) rhoProf.readReport(*_s);
if(pitch()) pitchProf.readReport(*_s); // Used only to ensure complete sampling
QVector<double> depths;
if(vpProf.count()==0) {
if(vsProf.count()==0) {
return 0;
} else {
depths << vsProf.depths();
depths << pitchProf.depths(); // It matters only if pitch is not empty
qSort(depths);
unique(depths);
vsProf.resample(depths);
return vsModel(vsProf.depths() ,vsProf.values());
}
} else {
if(vsProf.count()==0) {
depths << vpProf.depths();
depths << pitchProf.depths(); // It matters only if pitch is not empty
qSort(depths);
unique(depths);
vpProf.resample(depths);
return vpModel(vpProf.depths() ,vpProf.values());
} else if(rhoProf.count()==0) {
depths << vpProf.depths();
depths << vsProf.depths();
depths << pitchProf.depths();
qSort(depths);
unique(depths);
vpProf.resample(depths);
vsProf.resample(depths);
return vspModel(depths ,vpProf.values() ,vsProf.values());
} else {
depths << vpProf.depths();
depths << vsProf.depths();
depths << rhoProf.depths();
depths << pitchProf.depths();
qSort(depths);
unique(depths);
vpProf.resample(depths);
vsProf.resample(depths);
rhoProf.resample(depths);
QVector<double> vp=vpProf.values();
return surfaceWaveModel(depths ,vp, vsProf.values(), rhoProf.values());
}
}
}
| bool DinverDCCore::DCReportBlock::refractionVp | ( | ) | const [inline] |
Referenced by DinverDCGui::RefractionVpViewer::hasCurves(), and outputDCModel().
{return profile(8);}
| bool DinverDCCore::DCReportBlock::refractionVs | ( | ) | const [inline] |
Referenced by DinverDCGui::RefractionVsViewer::hasCurves(), and outputDCModel().
{return profile(9);}
| bool DinverDCCore::DCReportBlock::res | ( | ) | const [inline] |
Referenced by outputDCModel(), and readElectricModel().
{return profile(4);}
| bool DinverDCCore::DCReportBlock::rho | ( | ) | const [inline] |
Referenced by outputDCModel(), and readSeismicModel().
{return profile(2);}
| void DinverDCCore::DCReportBlock::setStorageReader | ( | ModalStorageReader * | r | ) | [inline] |
{delete _reader; _reader=r;};
| ModalStorageReader* DinverDCCore::DCReportBlock::storageReader | ( | ) | const [inline] |
{return _reader;};
| QDataStream& DinverDCCore::DCReportBlock::stream | ( | ) | [inline] |
Referenced by outputDCModel(), readProfiles(), DinverDCGui::RefractionViewer::report2plot(), DinverDCGui::EllipticityViewer::report2plot(), DinverDCGui::MagnetoTelluricViewer::report2plot(), DinverDCGui::DispersionViewer::report2plot(), DinverDCGui::AutocorrViewer::report2plot(), DinverDCGui::GroundModelViewer::report2plot(), DinverDCGui::RefractionViewer::setSampleCount(), DinverDCGui::EllipticityViewer::setSampleCount(), DinverDCGui::DispersionViewer::setSampleCount(), DinverDCGui::MagnetoTelluricViewer::setSampleCount(), DinverDCGui::AutocorrViewer::setSampleCount(), DinverDCGui::GroundModelViewer::setSampleCount(), and writeBeta().
{return *_s;}
| Seismic1DModel * DinverDCCore::DCReportBlock::surfaceWaveModel | ( | const QVector< double > & | zProf, |
| QVector< double > & | vpProf, | ||
| const QVector< double > & | vsProf, | ||
| const QVector< double > & | rhoProf, | ||
| const QVector< double > * | nuMinProf = 0, |
||
| const QVector< double > * | nuMaxProf = 0 |
||
| ) | [static] |
References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), QGpCoreTools::sqrt(), and TRACE.
Referenced by DinverDCCore::TargetList2D::misfit(), DinverDCCore::TargetList::misfit(), and readSeismicModel().
{
TRACE;
ASSERT(!nuMinProf || (nuMinProf && nuMaxProf));
int nLayers=zProf.size();
Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
int i;
int nLayers1=nLayers - 1;
double z=0.0;
for(i=0;i < nLayers1;i++ ) {
surfModel->setH(i, zProf[i] - z);
z=zProf[i];
surfModel->setSlowS(i, 1.0/vsProf[i] );
if(nuMinProf && nuMinProf->at(i)>=nuMaxProf->at(i)) {
vpProf[i]=vsProf[i]*sqrt(2.0*(nuMinProf->at(i)-1.0)/(2.0*nuMinProf->at(i)-1.0));
surfModel->setSlowP(i, 1.0/vpProf[i] );
}
surfModel->setSlowP(i, 1.0/vpProf[i] );
surfModel->setRho(i, rhoProf[i] );
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
}
if(nuMinProf && nuMinProf->at(i)>=nuMaxProf->at(i)) {
vpProf[i]=vsProf[i]*sqrt(2.0*(nuMinProf->at(i)-1.0)/(2.0*nuMinProf->at(i)-1.0));
}
surfModel->setSlowP(i, 1.0/vpProf[i] );
surfModel->setSlowS(i, 1.0/vsProf[i] );
surfModel->setRho(i, rhoProf[i] );
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
return surfModel;
}
| bool DinverDCCore::DCReportBlock::vp | ( | ) | const [inline] |
Referenced by outputDCModel(), and readSeismicModel().
{return profile(0);}
| Seismic1DModel * DinverDCCore::DCReportBlock::vpModel | ( | const QVector< double > & | zProf, |
| const QVector< double > & | vpProf | ||
| ) | [static] |
References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and TRACE.
Referenced by DinverDCCore::TargetList::misfit(), and readSeismicModel().
{
TRACE;
int nLayers=zProf.size();
Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
int i;
int nLayers1=nLayers - 1;
double z=0.0;
for(i=0;i < nLayers1;i++ ) {
surfModel->setH(i, zProf[i] - z);
z=zProf[i];
surfModel->setSlowP(i, 1.0/vpProf[i] );
surfModel->setSlowS(i, 0.0);
surfModel->setRho(i, 0.0);
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
}
surfModel->setSlowP(i, 1.0/vpProf[i] );
surfModel->setSlowS(i, 0.0);
surfModel->setRho(i, 0.0);
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
return surfModel;
}
| bool DinverDCCore::DCReportBlock::vs | ( | ) | const [inline] |
Referenced by outputDCModel(), and readSeismicModel().
{return profile(1);}
| Seismic1DModel * DinverDCCore::DCReportBlock::vsModel | ( | const QVector< double > & | zProf, |
| const QVector< double > & | vsProf | ||
| ) | [static] |
References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and TRACE.
Referenced by DinverDCCore::TargetList::misfit(), and readSeismicModel().
{
TRACE;
int nLayers=zProf.size();
Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
int i;
int nLayers1=nLayers - 1;
double z=0.0;
for(i=0;i < nLayers1;i++ ) {
surfModel->setH(i, zProf[i] - z);
z=zProf[i];
surfModel->setSlowP(i, 0.0);
surfModel->setSlowS(i, 1.0/vsProf[i] );
surfModel->setRho(i, 0.0);
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
}
surfModel->setSlowP(i, 0.0);
surfModel->setSlowS(i, 1.0/vsProf[i] );
surfModel->setRho(i, 0.0);
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
return surfModel;
}
| Seismic1DModel * DinverDCCore::DCReportBlock::vspModel | ( | const QVector< double > & | zProf, |
| const QVector< double > & | vpProf, | ||
| const QVector< double > & | vsProf | ||
| ) | [static] |
References QGpCoreWave::Seismic1DModel::setH(), QGpCoreWave::Seismic1DModel::setQp(), QGpCoreWave::Seismic1DModel::setQs(), QGpCoreWave::Seismic1DModel::setRho(), QGpCoreWave::Seismic1DModel::setSlowP(), QGpCoreWave::Seismic1DModel::setSlowS(), and TRACE.
Referenced by DinverDCCore::TargetList::misfit(), and readSeismicModel().
{
TRACE;
int nLayers=zProf.size();
Seismic1DModel * surfModel=new Seismic1DModel(nLayers);
int i;
int nLayers1=nLayers - 1;
double z=0.0;
for(i=0;i < nLayers1;i++ ) {
surfModel->setH(i, zProf[i] - z);
z=zProf[i];
surfModel->setSlowP(i, 1.0/vpProf[i] );
surfModel->setSlowS(i, 1.0/vsProf[i] );
surfModel->setRho(i, 0.0);
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
}
surfModel->setSlowP(i, 1.0/vpProf[i] );
surfModel->setSlowS(i, 1.0/vsProf[i] );
surfModel->setRho(i, 0.0);
surfModel->setQp(i, 0.0);
surfModel->setQs(i, 0.0);
return surfModel;
}
| void DinverDCCore::DCReportBlock::write | ( | ReportWriter * | report, |
| const TargetList & | tl, | ||
| const Profile * | vp = 0, |
||
| const Profile * | vs = 0, |
||
| const Profile * | rho = 0, |
||
| const Profile * | pitch = 0, |
||
| const Profile * | res = 0 |
||
| ) | [static] |
References DCREPORTBLOCK_CURRENT_VERSION, DinverCore::ReportWriter::stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), QGpCoreWave::Profile::writeReport(), QGpCoreWave::MagnetoTelluricFactory::writeReport(), and QGpCoreWave::RefractionFactory::writeReport().
Referenced by DinverDCCore::TargetList2D::writeReport(), and DinverDCCore::TargetList::writeReport().
{
TRACE;
// Tag and block version
report->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
QDataStream& s=report->stream();
qint64 tableOffset=s.device()->pos();
writeOffsetTable(s);
// Save profiles
if(vp) {
ReportWriter::setCurrentOffset(s, tableOffset);
vp->writeReport(s);
}
if(vs) {
ReportWriter::setCurrentOffset(s, tableOffset+8);
vs->writeReport(s);
}
if(rho) {
ReportWriter::setCurrentOffset(s, tableOffset+16);
rho->writeReport(s);
}
if(pitch) {
ReportWriter::setCurrentOffset(s, tableOffset+24);
pitch->writeReport(s);
}
if(res) {
ReportWriter::setCurrentOffset(s, tableOffset+32);
res->writeReport(s);
}
// Surface waves
if(tl._dispersionFactory) {
ReportWriter::setCurrentOffset(s, tableOffset+40);
writeFactory(s, *tl._dispersionFactory);
}
if(tl._autocorrFactory) {
ReportWriter::setCurrentOffset(s, tableOffset+48);
writeFactory(s, *tl._autocorrFactory);
}
if(tl._ellipticityFactory) {
ReportWriter::setCurrentOffset(s, tableOffset+56);
writeFactory(s, *tl._ellipticityFactory);
}
// Refraction
if(tl._refractionVpFactory) {
ReportWriter::setCurrentOffset(s, tableOffset+64);
tl._refractionVpFactory->writeReport(s);
}
if(tl._refractionVsFactory) {
ReportWriter::setCurrentOffset(s, tableOffset+72);
tl._refractionVsFactory->writeReport(s);
}
// Magneto-telluric
if(tl._magnetoTelluricFactory) {
ReportWriter::setCurrentOffset(s, tableOffset+80);
tl._magnetoTelluricFactory->writeReport(s);
}
}
| void DinverDCCore::DCReportBlock::write | ( | ReportWriter * | outReport, |
| ReportReader * | inReport | ||
| ) | [static] |
Copy one model from inReport to outReport. inReport must point to the beginning of the user block ("DISP"), after tag and version. The model is appended to outReport.
References DCREPORTBLOCK_CURRENT_VERSION, readProfiles(), QGpCoreWave::Profile::readReport(), QGpCoreWave::MagnetoTelluricFactory::readReport(), QGpCoreWave::RefractionFactory::readReport(), sOut(), DinverCore::ReportReader::stream(), DinverCore::ReportWriter::stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), DinverCore::ReportReader::userBlockVersion(), QGpCoreWave::Profile::writeReport(), QGpCoreWave::MagnetoTelluricFactory::writeReport(), and QGpCoreWave::RefractionFactory::writeReport().
{
TRACE;
int inVersion=inReport->userBlockVersion( "DISP" );
if(inVersion<0) {
return;
}
DCReportBlock dcBlock(inReport->stream());
dcBlock.readProfiles(inVersion);
// Tag and block version
outReport->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
QDataStream& sOut=outReport->stream();
qint64 tableOffset=sOut.device()->pos();
writeOffsetTable(sOut);
// Save profiles
for(int i=0;i<5;i++) {
if(dcBlock.profile(i)) {
Profile p;
ReportWriter::setCurrentOffset(sOut, tableOffset + i*8);
p.readReport(inReport->stream());
p.writeReport(sOut);
}
}
if(dcBlock.profile(5)) {
ReportWriter::setCurrentOffset(sOut, tableOffset+40);
writeFactory(sOut, dcBlock, 4);
}
if(dcBlock.profile(6)) {
ReportWriter::setCurrentOffset(sOut, tableOffset+48);
int nRings;
dcBlock.stream() >> nRings;
writeFactory(sOut, dcBlock, 3*nRings);
}
if(dcBlock.profile(7)) {
ReportWriter::setCurrentOffset(sOut, tableOffset+56);
writeFactory(sOut, dcBlock, 1);
}
if(dcBlock.profile(8)) { // Refraction Vp
ReportWriter::setCurrentOffset(sOut, tableOffset+64);
RefractionFactory f;
f.readReport(dcBlock.stream());
f.writeReport(sOut);
}
if(dcBlock.profile(9)) { // Refraction Vs
ReportWriter::setCurrentOffset(sOut, tableOffset+72);
RefractionFactory f;
f.readReport(dcBlock.stream());
f.writeReport(sOut);
}
if(dcBlock.profile(10)) { // Magneto-telluric
ReportWriter::setCurrentOffset(sOut, tableOffset+80);
MagnetoTelluricFactory f;
f.readReport(dcBlock.stream());
f.writeReport(sOut);
}
}
| void DinverDCCore::DCReportBlock::writeBeta | ( | ReportWriter * | outReport, |
| ReportReader * | inReport | ||
| ) | [static] |
Compatibility with reports generated by Beta release from June 2006
References DCREPORTBLOCK_CURRENT_VERSION, profile(), readProfiles(), QGpCoreWave::Profile::readReport(), sOut(), DinverCore::ReportReader::stream(), DinverCore::ReportWriter::stream(), stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), DinverCore::ReportReader::userBlockVersion(), and QGpCoreWave::Profile::writeReport().
{
TRACE;
int inVersion=inReport->userBlockVersion( "DISP" );
if(inVersion<0) {
return;
}
DCReportBlock dcBlock(inReport->stream());
dcBlock.readProfiles(inVersion);
// Tag and block version
outReport->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
QDataStream& sOut=outReport->stream();
qint64 tableOffset=sOut.device()->pos();
writeOffsetTable(sOut);
// Save profiles
for(int i=0;i<5;i++) {
if(dcBlock.profile(i)) {
Profile p;
ReportWriter::setCurrentOffset(sOut, tableOffset + i*8);
p.readReport(inReport->stream());
p.writeReport(sOut);
}
}
if(dcBlock.profile(5)) {
ReportWriter::setCurrentOffset(sOut, tableOffset+40);
writeFactoryBeta(sOut, dcBlock, 4);
}
if(dcBlock.profile(6)) {
ReportWriter::setCurrentOffset(sOut, tableOffset+48);
int nRings;
dcBlock.stream() >> nRings;
writeFactory(sOut, dcBlock, 3*nRings);
}
if(dcBlock.profile(7)) {
ReportWriter::setCurrentOffset(sOut, tableOffset+56);
writeFactory(sOut, dcBlock, 1);
}
}
| void DinverDCCore::DCReportBlock::writeNaViewer | ( | ReportWriter * | outReport, |
| CompatInversionReport * | inReport | ||
| ) | [static] |
Compatibility with reports generated by Na_viewer
References QGpCompatibility::CompatInversionReport::currentDispersion(), QGpCompatibility::CompatInversionReport::currentModel(), DCREPORTBLOCK_CURRENT_VERSION, QGpCoreWave::Seismic1DModel::rhoProfile(), sOut(), DinverCore::ReportWriter::stream(), TRACE, DinverCore::ReportWriter::userBlockHeader(), QGpCoreWave::Seismic1DModel::vpProfile(), QGpCoreWave::Seismic1DModel::vsProfile(), and QGpCoreWave::Profile::writeReport().
{
TRACE;
// Tag and block version
outReport->userBlockHeader("DISP", DCREPORTBLOCK_CURRENT_VERSION);
QDataStream& sOut=outReport->stream();
qint64 tableOffset=sOut.device()->pos();
writeOffsetTable(sOut);
// Save profiles
Seismic1DModel * m=inReport->currentModel();
ReportWriter::setCurrentOffset(sOut, tableOffset);
m->vpProfile().writeReport(sOut);
ReportWriter::setCurrentOffset(sOut, tableOffset+8);
m->vsProfile().writeReport(sOut);
ReportWriter::setCurrentOffset(sOut, tableOffset+16);
m->rhoProfile().writeReport(sOut);
if(inReport->currentDispersion()) {
ReportWriter::setCurrentOffset(sOut, tableOffset+40);
writeFactoryNaViewer(sOut, inReport->currentDispersion(), 4);
}
// Autocorr and ellipticities not implemented
}