Brief description of class still missing. More...
#include <TargetList.h>
Brief description of class still missing.
Full description of class still missing
Description of constructor still missing
References QGpCoreTools::L2_LogNormalized, DinverDCCore::Target::setMisfitType(), and TRACE.
{ TRACE; initFactories(); initProfiles(); // Ellipticity values are expressed on a log scale _ellipticityCurveTarget.setMisfitType(L2_LogNormalized); }
DinverDCCore::TargetList::TargetList | ( | const TargetList & | o | ) |
References TRACE, and validateTargets().
: XMLClass(), _dispersionTarget(o._dispersionTarget), _autocorrTarget(o._autocorrTarget), _ellipticityCurveTarget(o._ellipticityCurveTarget), _ellipticityPeakTarget(o._ellipticityPeakTarget), _refractionVpTarget(o._refractionVpTarget), _refractionVsTarget(o._refractionVsTarget), _magnetoTelluricTarget(o._magnetoTelluricTarget) { TRACE; _position=o._position; initFactories(); initProfiles(); validateTargets(); }
DinverDCCore::TargetList::~TargetList | ( | ) | [virtual] |
AutocorrTarget& DinverDCCore::TargetList::autocorrTarget | ( | ) | [inline] |
Referenced by main(), SpacSelector::saveSelection(), TargetListWidget::setFrom(), DinverDCGui::AutocorrViewer::setTarget(), TargetListWidget::targetList(), and SPACLoop::~SPACLoop().
{return _autocorrTarget;}
const AutocorrTarget& DinverDCCore::TargetList::autocorrTarget | ( | ) | const [inline] |
{return _autocorrTarget;}
int DinverDCCore::TargetList::dispersionSampleCount | ( | ) | const |
Return the number of sample internally set to dispersion computation. Mainly used to inform the user.
References QGpCoreWave::DispersionFactory::groupRayleigh(), QGpCoreWave::DispersionFactory::phaseRayleigh(), TRACE, and QGpCoreWave::ModalStorage::xCount().
Referenced by DCPlugin::initForward().
{ TRACE; if(!_dispersionFactory) return 0; int nSamples=0; Dispersion * d=_dispersionFactory->phaseRayleigh(); if(d) { nSamples=d->xCount(); } else { d=_dispersionFactory->groupRayleigh(); if(d) { nSamples=d->xCount(); } } return nSamples; }
ModalCurveTarget& DinverDCCore::TargetList::dispersionTarget | ( | ) | [inline] |
Referenced by TargetExtract::execute(), TargetAdd::execute(), main(), TargetListWidget::setFrom(), DinverDCGui::DispersionViewer::setTarget(), and TargetListWidget::targetList().
{return _dispersionTarget;}
const ModalCurveTarget& DinverDCCore::TargetList::dispersionTarget | ( | ) | const [inline] |
{return _dispersionTarget;}
Referenced by main(), TargetListWidget::setFrom(), DinverDCGui::EllipticityViewer::setTarget(), and TargetListWidget::targetList().
{return _ellipticityCurveTarget;}
const ModalCurveTarget& DinverDCCore::TargetList::ellipticityCurveTarget | ( | ) | const [inline] |
{return _ellipticityCurveTarget;}
ValueTarget& DinverDCCore::TargetList::ellipticityPeakTarget | ( | ) | [inline] |
Referenced by main(), TargetListWidget::setFrom(), DinverDCGui::EllipticityViewer::setTarget(), and TargetListWidget::targetList().
{return _ellipticityPeakTarget;}
const ValueTarget& DinverDCCore::TargetList::ellipticityPeakTarget | ( | ) | const [inline] |
{return _ellipticityPeakTarget;}
bool DinverDCCore::TargetList::isEmpty | ( | ) | const |
References DinverDCCore::ModalCurveTarget::curves(), DinverDCCore::AutocorrTarget::curves(), DinverDCCore::MagnetoTelluricTarget::curves(), DinverDCCore::RefractionTarget::curves(), QGpCoreWave::AutocorrCurves::isEmpty(), QGpCoreTools::StatisticalValue< numberType >::isValid(), TRACE, and DinverDCCore::ValueTarget::value().
Referenced by TargetMerge::execute().
{ TRACE; return _dispersionTarget.curves().isEmpty() && !_ellipticityPeakTarget.value().isValid() && _ellipticityCurveTarget.curves().isEmpty() && _autocorrTarget.curves().isEmpty() && _refractionVpTarget.curves().isEmpty() && _refractionVsTarget.curves().isEmpty() && _magnetoTelluricTarget.curves().isEmpty(); }
bool DinverDCCore::TargetList::isGroundModelParameter | ( | const Parameter * | p | ) | const [inline] |
Referenced by Forward::isFussyOk(), and Forward::valueChanged().
{
return p!= _magnetoTelluricStaticShift;
}
bool DinverDCCore::TargetList::isPoissonRatioOk | ( | const GroundParameter * | from | ) | [inline] |
References DinverDCCore::PoissonCondition::isOk(), and TRACE.
Referenced by Forward::isFussyOk().
void DinverDCCore::TargetList::magnetoTelluricMisfit | ( | double & | totalMisfit, |
double & | totalWeight, | ||
const Resistivity1DModel * | model, | ||
double | staticShift, | ||
int | nDimensions, | ||
bool & | ok | ||
) |
References QGpCoreWave::MagnetoTelluricFactory::calculate(), DinverDCCore::MagnetoTelluricTarget::curves(), and TRACE.
Referenced by misfit(), and reportMode().
{ TRACE; double individualMisfit; if(!_magnetoTelluricFactory->calculate(*model, staticShift)) { ok=false; return; } individualMisfit=curveMisfit(_magnetoTelluricTarget.curves(), *_magnetoTelluricFactory, _magnetoTelluricTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_magnetoTelluricTarget.misfitWeight()*individualMisfit; totalWeight+=_magnetoTelluricTarget.misfitWeight(); }
Referenced by TargetAdd::execute(), main(), TargetListWidget::setFrom(), DinverDCGui::MagnetoTelluricViewer::setTarget(), and TargetListWidget::targetList().
{return _magnetoTelluricTarget;}
const MagnetoTelluricTarget& DinverDCCore::TargetList::magnetoTelluricTarget | ( | ) | const [inline] |
{return _magnetoTelluricTarget;}
double DinverDCCore::TargetList::misfit | ( | int | nDimensions, |
bool & | ok | ||
) |
nDimensions is number of free parameters. This is used only if Akaike misfit is computed.
References DinverDCCore::RefractionTarget::curves(), DinverDCCore::MagnetoTelluricTarget::curves(), QGpCoreWave::Profile::depths(), magnetoTelluricMisfit(), DinverDCCore::ParamProfile::maxResampledProfile(), DinverDCCore::ParamProfile::minResampledProfile(), DinverCore::Parameter::realValue(), refractionMisfit(), DinverDCCore::ParamProfile::resampledProfile(), DinverDCCore::Target::selected(), surfaceMisfit(), DinverDCCore::DCReportBlock::surfaceWaveModel(), TRACE, QGpCoreWave::Profile::values(), DinverDCCore::DCReportBlock::vpModel(), DinverDCCore::DCReportBlock::vsModel(), and DinverDCCore::DCReportBlock::vspModel().
Referenced by Forward::misfit().
{ TRACE; double totalMisfit=0; double totalWeight=0; Seismic1DModel * m=0; if(surfaceWave()) { m=DCReportBlock::surfaceWaveModel(_vp->resampledProfile().depths(), _vp->resampledProfile().values(), _vs->resampledProfile().values(), _rho->resampledProfile().values(), &_nu->minResampledProfile().values(), &_nu->maxResampledProfile().values()); //fprintf(stdout,"%s\n",surfModel->toString().toAscii().data()); surfaceMisfit(totalMisfit, totalWeight, m, nDimensions, ok); if((_refractionVpTarget.selected() && !_refractionVpTarget.curves().isEmpty()) || (_refractionVsTarget.selected() && !_refractionVsTarget.curves().isEmpty())) { refractionMisfit(totalMisfit, totalWeight, m, _pitch->resampledProfile().values(), nDimensions, ok); } } else { // No surface wave if(_refractionVpTarget.selected() && !_refractionVpTarget.curves().isEmpty()) { if(_refractionVsTarget.selected() && !_refractionVsTarget.curves().isEmpty()) { m=DCReportBlock::vspModel(_pitch->resampledProfile().depths(), _vp->resampledProfile().values(), _vs->resampledProfile().values()); } else { m=DCReportBlock::vpModel(_pitch->resampledProfile().depths(), _vp->resampledProfile().values()); } } else if(_refractionVsTarget.selected() && !_refractionVsTarget.curves().isEmpty()) { m=DCReportBlock::vsModel(_pitch->resampledProfile().depths(), _vs->resampledProfile().values()); } if(m) refractionMisfit(totalMisfit, totalWeight, m, _pitch->resampledProfile().values(), nDimensions, ok); } delete m; if(_magnetoTelluricTarget.selected() && !_magnetoTelluricTarget.curves().isEmpty()) { double staticShift; if(_magnetoTelluricStaticShift) { staticShift=_magnetoTelluricStaticShift->realValue(); } else { staticShift=1.0; } Resistivity1DModel m(_res->resampledProfile()); magnetoTelluricMisfit(totalMisfit, totalWeight, &m, staticShift, nDimensions, ok); } if(totalWeight > 0) return totalMisfit/totalWeight; else return totalMisfit; }
const Point& DinverDCCore::TargetList::position | ( | ) | const [inline] |
Referenced by TargetExtract::execute(), DinverDCCore::TargetList2D::humanInfo(), and DinverDCCore::TargetList2D::misfit().
{return _position;}
void DinverDCCore::TargetList::refractionMisfit | ( | double & | totalMisfit, |
double & | totalWeight, | ||
Seismic1DModel * | surfModel, | ||
const QVector< double > & | pitch, | ||
int | nDimensions, | ||
bool & | ok | ||
) |
References QGpCoreWave::RefractionFactory::calculate(), DinverDCCore::RefractionTarget::curves(), QGpCoreWave::RefractionDippingModel::fromSeismic1DModel(), QGpCoreWave::Seismic1DModel::layerCount(), DinverDCCore::Target::selected(), and TRACE.
Referenced by misfit(), refractionModelMode(), and reportMode().
{ TRACE; double individualMisfit; if(_refractionVpTarget.selected() && !_refractionVpTarget.curves().isEmpty()) { RefractionDippingModel m(surfModel->layerCount()); m.fromSeismic1DModel( *surfModel, pitch, Seismic1DModel::P); if( !_refractionVpFactory->calculate(&m) ) { ok=false; return; } individualMisfit=curveMisfit(_refractionVpTarget.curves(), *_refractionVpFactory, _refractionVpTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_refractionVpTarget.misfitWeight()*individualMisfit; totalWeight+=_refractionVpTarget.misfitWeight(); } if(_refractionVsTarget.selected() && !_refractionVsTarget.curves().isEmpty()) { RefractionDippingModel m(surfModel->layerCount()); m.fromSeismic1DModel( *surfModel, pitch, Seismic1DModel::S); if( !_refractionVsFactory->calculate(&m) ) { ok=false; return; } individualMisfit=curveMisfit(_refractionVsTarget.curves(), *_refractionVsFactory, _refractionVsTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_refractionVsTarget.misfitWeight()*individualMisfit; totalWeight+=_refractionVsTarget.misfitWeight(); } }
void DinverDCCore::TargetList::refractionMisfit | ( | double & | totalMisfit, |
double & | totalWeight, | ||
RefractionDippingModel * | tiltModel, | ||
int | nDimensions, | ||
bool & | ok | ||
) |
References QGpCoreWave::RefractionFactory::calculate(), DinverDCCore::RefractionTarget::curves(), DinverDCCore::Target::misfitWeight(), DinverDCCore::Target::selected(), and TRACE.
{ TRACE; double individualMisfit; if(_refractionVpTarget.selected() && !_refractionVpTarget.curves().isEmpty()) { if( !_refractionVpFactory->calculate(tiltModel) ) { ok=false; return; } individualMisfit=curveMisfit(_refractionVpTarget.curves(), *_refractionVpFactory, _refractionVpTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_refractionVpTarget.misfitWeight()*individualMisfit; totalWeight+=_refractionVpTarget.misfitWeight(); } if(_refractionVsTarget.selected() && !_refractionVsTarget.curves().isEmpty()) { if( !_refractionVsFactory->calculate(tiltModel) ) { ok=false; return; } individualMisfit=curveMisfit(_refractionVsTarget.curves(), *_refractionVsFactory, _refractionVsTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_refractionVpTarget.misfitWeight()*individualMisfit; totalWeight+=_refractionVsTarget.misfitWeight(); } }
RefractionTarget& DinverDCCore::TargetList::refractionVpTarget | ( | ) | [inline] |
Referenced by main(), TargetListWidget::setFrom(), DinverDCGui::RefractionVpViewer::setTarget(), and TargetListWidget::targetList().
{return _refractionVpTarget;}
const RefractionTarget& DinverDCCore::TargetList::refractionVpTarget | ( | ) | const [inline] |
{return _refractionVpTarget;}
RefractionTarget& DinverDCCore::TargetList::refractionVsTarget | ( | ) | [inline] |
Referenced by main(), TargetListWidget::setFrom(), DinverDCGui::RefractionVsViewer::setTarget(), and TargetListWidget::targetList().
{return _refractionVsTarget;}
const RefractionTarget& DinverDCCore::TargetList::refractionVsTarget | ( | ) | const [inline] |
{return _refractionVsTarget;}
References DinverDCCore::Target::setMisfitType(), and TRACE.
Referenced by main().
{ TRACE; _dispersionTarget.setMisfitType(t); _dispersionTarget.setMisfitType(t); _autocorrTarget.setMisfitType(t); _ellipticityCurveTarget.setMisfitType(t); _ellipticityPeakTarget.setMisfitType(t); _refractionVpTarget.setMisfitType(t); _refractionVsTarget.setMisfitType(t); _magnetoTelluricTarget.setMisfitType(t); }
void DinverDCCore::TargetList::setParamProfiles | ( | ParamGroundModel * | gm, |
RealSpace & | ps | ||
) |
References DinverCore::RealSpace::addCondition(), DinverDCCore::ParamProfile::Condition, QGpCoreTools::endl(), DinverDCCore::ParamGroundModel::find(), DinverCore::RealSpace::parameter(), QGpCoreTools::tr(), TRACE, and DinverDCCore::ParamProfile::type().
Referenced by Forward::setParamSpace().
{ TRACE; _vp=gm->find( "Vp" ); _vs=gm->find( "Vs" ); _rho=gm->find( "Rho" ); _pitch=gm->find( "Pitch" ); _res=gm->find( "Res" ); if(_vp && _vs) { _nu=gm->find( "Nu" ); ASSERT(_nu && _nu->type()==ParamProfile::Condition); _poissonCondition=new PoissonCondition(_vp, _vs, _nu); ps.addCondition(_poissonCondition); } if(_res) { _magnetoTelluricStaticShift=ps.parameter("MTStatic"); if(_magnetoTelluricStaticShift){ App::stream() << tr("Magneto-telluric static shift included") << endl; } else { App::stream() << tr("Magneto-telluric static shift not found (paramter 'MTStatic'") << endl; } } }
void DinverDCCore::TargetList::setPosition | ( | const Point & | p | ) | [inline] |
Referenced by TargetAdd::execute().
{_position=p;}
void DinverDCCore::TargetList::surfaceMisfit | ( | double & | totalMisfit, |
double & | totalWeight, | ||
Seismic1DModel * | surfModel, | ||
int | nDimensions, | ||
bool & | ok | ||
) |
References QGpCoreWave::DispersionFactory::calculate(), QGpCoreWave::AutocorrFactory::calculate(), DinverDCCore::ModalCurveTarget::curves(), DinverDCCore::AutocorrTarget::curves(), QGpCoreWave::AutocorrCurves::curves(), QGpCoreTools::endl(), QGpCoreWave::Seismic1DModel::initCalculation(), QGpCoreWave::AutocorrCurves::isEmpty(), QGpCoreTools::StatisticalValue< numberType >::isValid(), DinverDCCore::Target::minimumMisfit(), DinverDCCore::Target::misfitWeight(), QGpCoreWave::EllipticityFactory::peakMisfit(), DinverDCCore::Target::selected(), QGpCoreWave::Seismic1DModel::toString(), QGpCoreTools::tr(), TRACE, and DinverDCCore::ValueTarget::value().
Referenced by DinverDCCore::TargetList2D::misfit(), misfit(), reportMode(), and surfaceModelMode().
{ TRACE; double individualMisfit; if(!surfModel->initCalculation()) { App::stream() << tr( " *** WARNING *** : bad physical model" ) << endl; App::stream() << surfModel->toString() << endl; ok=false; return; } // Determinant misfit individualMisfit=determinantMisfit(_dispersionTarget.curves(), surfModel); totalMisfit+=_dispersionTarget.misfitWeight()*individualMisfit; totalWeight+=_dispersionTarget.misfitWeight(); return; // Rayleigh and/or Love modes, phase and/or group if(!_dispersionFactory->calculate(surfModel, _ellipticityFactory)) { ok=false; return; } if(_dispersionTarget.selected() && !_dispersionTarget.curves().isEmpty()) { individualMisfit=curveMisfit(_dispersionTarget.curves(), *_dispersionFactory, _dispersionTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_dispersionTarget.misfitWeight()*individualMisfit; totalWeight+=_dispersionTarget.misfitWeight(); } if(_autocorrTarget.selected() && !_autocorrTarget.curves().isEmpty()) { _autocorrFactory->calculate(_dispersionFactory); /*if(_autocorrFactory->isRadial() || _autocorrFactory->isTransverse()) { _autocorrFactory->setAlpha(_autocorrCurves.curves()); _autocorrFactory->setHorizontalAutocorr(); }*/ individualMisfit=curveMisfit(_autocorrTarget.curves().curves(), *_autocorrFactory, _autocorrTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_autocorrTarget.misfitWeight()*individualMisfit; totalWeight+=_autocorrTarget.misfitWeight(); } if(_ellipticityCurveTarget.selected() && !_ellipticityCurveTarget.curves().isEmpty()) { individualMisfit=curveMisfit(_ellipticityCurveTarget.curves(), *_ellipticityFactory, _ellipticityCurveTarget, nDimensions); if(individualMisfit==-1) { ok=false; return; } totalMisfit+=_ellipticityCurveTarget.misfitWeight()*individualMisfit; totalWeight+=_ellipticityCurveTarget.misfitWeight(); } if(_ellipticityPeakTarget.selected() && _ellipticityPeakTarget.value().isValid()) { // TODO includes misfitType // Ellipticity peak misfit is not a L2 norm but just a L1... individualMisfit=_ellipticityFactory->peakMisfit(_ellipticityPeakTarget.value(), *_dispersionFactory, surfModel); if(individualMisfit<_ellipticityPeakTarget.minimumMisfit()) { individualMisfit=_ellipticityPeakTarget.minimumMisfit(); } totalMisfit+=_ellipticityPeakTarget.misfitWeight()*individualMisfit; totalWeight+=_ellipticityPeakTarget.misfitWeight(); } }
Build the factories responsible for computing dispersion curves and misfits
References DinverDCCore::ModalCurveTarget::curves(), DinverDCCore::AutocorrTarget::curves(), DinverDCCore::RefractionTarget::curves(), DinverDCCore::MagnetoTelluricTarget::curves(), QGpCoreWave::AutocorrCurves::curves(), QGpCoreTools::Function, QGpCoreWave::AutocorrFactory::init(), QGpCoreWave::AutocorrCurves::isEmpty(), QGpCoreTools::StatisticalValue< numberType >::isValid(), QGpCoreTools::Curve< pointType >::line(), QGpCoreWave::MagnetoTelluricFactory::linkX(), QGpCoreWave::ModalFactory::linkX(), QGpCoreWave::RefractionFactory::linkX(), QGpCoreTools::LogScale, QGpCoreTools::Curve< pointType >::resample(), QGpCoreWave::AutocorrCurves::ringCount(), QGpCoreWave::AutocorrCurves::ringCurves(), QGpCoreWave::AutocorrCurves::rings(), DinverDCCore::Target::selected(), QGpCoreWave::MagnetoTelluricFactory::setAngularFrequency(), QGpCoreWave::ModalFactory::setAngularFrequency(), QGpCoreWave::EllipticityFactory::setMode(), QGpCoreWave::ModalFactory::setModes(), QGpCoreWave::MagnetoTelluricFactory::setX(), QGpCoreWave::ModalFactory::setX(), QGpCoreWave::RefractionFactory::setX(), TRACE, QGpCoreWave::DispersionFactory::validate(), and DinverDCCore::ValueTarget::value().
Referenced by main(), TargetListWidget::targetList(), TargetList(), and xml_polish().
{ TRACE; // Init all factories instead of just dispersion (until 20110404) // Bug encountered in gpdcmisfit: load a target with various sub-targets, options // from command line do not select all of them. // Hence factories were still allocated but not validated // however still used by calculate(). deleteFactories(); initFactories(); // Set X from curves if(_dispersionTarget.selected() && !_dispersionTarget.curves().isEmpty()) { _dispersionFactory=new DispersionFactory; _dispersionFactory->setX(_dispersionTarget.curves()); } if(_ellipticityCurveTarget.selected() && !_ellipticityCurveTarget.curves().isEmpty()) { _ellipticityFactory=new EllipticityFactory; _ellipticityFactory->setX(_ellipticityCurveTarget.curves()); if(!_dispersionFactory) { _dispersionFactory=new DispersionFactory; } } if(_autocorrTarget.selected() && !_autocorrTarget.curves().isEmpty()) { _autocorrFactory=new AutocorrFactory(_autocorrTarget.curves().rings()); int nRings=_autocorrTarget.curves().ringCount(); for(int iRing=0; iRing<nRings; iRing++) { _autocorrFactory->setX(_autocorrTarget.curves().ringCurves(iRing)); } if(!_dispersionFactory) { _dispersionFactory=new DispersionFactory; } } if(_ellipticityPeakTarget.selected() && _ellipticityPeakTarget.value().isValid()) { if(!_ellipticityFactory) { _ellipticityFactory=new EllipticityFactory; if(!_dispersionFactory) { _dispersionFactory=new DispersionFactory; // No sampling defined elsewhere, use a default one from 0.2 to 20 with 100 samples on a log scale ModalCurve c; c.line(FactoryPoint(0.2, 0.0), FactoryPoint(20.0, 0.0)); c.resample(100, 0.2, 20.0, LogScale | Function); _ellipticityFactory->setX(c); } } } // Set consistent X between factories if(_autocorrFactory) { _autocorrFactory->setX( *_dispersionFactory); } if(_ellipticityFactory) { _ellipticityFactory->setX( *_dispersionFactory); if(_autocorrFactory) { // Share again with autocorr if any _autocorrFactory->setX( *_dispersionFactory); } } // Set modes if(_dispersionFactory) { if(_dispersionTarget.selected() && !_dispersionTarget.curves().isEmpty()) { _dispersionFactory->linkX(_dispersionTarget.curves()); _dispersionFactory->setModes(_dispersionTarget.curves()); } _dispersionFactory->setAngularFrequency(); if(_ellipticityFactory) { if(_ellipticityCurveTarget.selected() && !_ellipticityCurveTarget.curves().isEmpty()) { _ellipticityFactory->linkX(_ellipticityCurveTarget.curves()); _ellipticityFactory->setModes(_ellipticityCurveTarget.curves()); } _ellipticityFactory->setAngularFrequency(); if(_ellipticityPeakTarget.selected() && _ellipticityPeakTarget.value().isValid()) { _ellipticityFactory->setMode(Mode(Mode::Phase, Mode::Rayleigh, 0)); // TODO Add mode selector in ellipticity peak } } if(_autocorrFactory) { _autocorrFactory->linkX(_autocorrTarget.curves().curves()); _autocorrFactory->setModes(_autocorrTarget.curves().curves()); _autocorrFactory->setAngularFrequency(); _autocorrFactory->init(); } _dispersionFactory->validate(_ellipticityFactory, _autocorrFactory); } if(_refractionVpTarget.selected() && !_refractionVpTarget.curves().isEmpty()) { _refractionVpFactory=new RefractionFactory(); _refractionVpFactory->setX(_refractionVpTarget.curves()); _refractionVpFactory->linkX(_refractionVpTarget.curves()); } if(_refractionVpTarget.selected() && !_refractionVsTarget.curves().isEmpty()) { _refractionVsFactory=new RefractionFactory(); _refractionVsFactory->setX(_refractionVsTarget.curves()); _refractionVsFactory->linkX(_refractionVsTarget.curves()); } if(_magnetoTelluricTarget.selected() && !_magnetoTelluricTarget.curves().isEmpty()) { delete _magnetoTelluricFactory; _magnetoTelluricFactory=new MagnetoTelluricFactory(); _magnetoTelluricFactory->setX(_magnetoTelluricTarget.curves()); _magnetoTelluricFactory->linkX(_magnetoTelluricTarget.curves()); _magnetoTelluricFactory->setAngularFrequency(); } }
void DinverDCCore::TargetList::writeReport | ( | ReportWriter * | report | ) | const [inline] |
References DinverDCCore::ParamProfile::resampledProfile(), TRACE, and DinverDCCore::DCReportBlock::write().
Referenced by Forward::writeReport().
{ TRACE; DCReportBlock::write(report, *this, _vp ? &_vp->resampledProfile() : 0, _vs ? &_vs->resampledProfile() : 0, _rho ? &_rho->resampledProfile() : 0, _pitch ? &_pitch->resampledProfile() : 0, _res ? &_res->resampledProfile() : 0); }
XMLMember DinverDCCore::TargetList::xml_member | ( | XML_MEMBER_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore (children and properties) support to your class.
From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:
Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):
static const QString tmp("childrenName"); XMLRestoreAttributeIterator it=map.find(tmp); if(it!=map.end()) { // found attribute "childrenName" }
If the map of attributes is not used:
Q_UNUSED(attributes); if(tag=="x1") return XMLMember(0); else if(tag=="y1") return XMLMember(1); else if(tag=="x2") return XMLMember(2); else if(tag=="y2") return XMLMember(3); else return XMLMember(XMLMember::Unknown);
Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.
if(tag=="anInteger") return XMLMember(0); else if(tag=="aString") return XMLMember(1); else if(tag=="aDouble") return XMLMember(2); return AbstractLine::xml_member(tag, attributes, context)+3;
For the arguments of this function use Macro XML_MEMBER_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References DinverDCCore::ModalCurveTarget::curves(), DinverDCCore::AutocorrTarget::curves(), DinverDCCore::RefractionTarget::curves(), QGpCoreTools::endl(), QGpCoreTools::tr(), TRACE, and DinverDCCore::ValueTarget::value().
{ TRACE; Q_UNUSED(context); static const QString attName("type"); if(tag=="ModalCurveTarget") { XMLRestoreAttributeIterator it=attributes.find(attName); if(it!=attributes.end()) { if(it.value()=="dispersion") { return XMLMember(&_dispersionTarget); } else if(it.value()=="ellipticity") { return XMLMember(&_ellipticityCurveTarget); } else { App::stream() << tr("Wrong type of modal curve target: %1").arg(it.value().toString()) << endl; return XMLMember(XMLMember::Unknown); } } else { App::stream() << tr("No type defined for modal curve target") << endl; return XMLMember(XMLMember::Unknown); } } else if(tag=="AutocorrTarget") { return XMLMember(&_autocorrTarget); } else if(tag=="ValueTarget") { XMLRestoreAttributeIterator it=attributes.find(attName); if(it!=attributes.end()) { if(it.value()=="ellipticity peak") { return XMLMember(&_ellipticityPeakTarget); } else { App::stream() << tr("Wrong type of value target: %1").arg(it.value().toString()) << endl; return XMLMember(XMLMember::Unknown); } } else { App::stream() << tr("No type defined for value target") << endl; return XMLMember(XMLMember::Unknown); } } else if(tag=="RefractionTarget") { XMLRestoreAttributeIterator it=attributes.find(attName); if(it!=attributes.end()) { if(it.value()=="Vp") { return XMLMember(&_refractionVpTarget); } else if(it.value()=="Vs") { return XMLMember(&_refractionVsTarget); } else { App::stream() << tr("Wrong type of refraction target: %1").arg(it.value().toString()) << endl; return XMLMember(XMLMember::Unknown); } } else { App::stream() << tr("No type defined for refraction target") << endl; return XMLMember(XMLMember::Unknown); } } else if(tag=="MagnetoTelluricTarget") { return XMLMember(&_magnetoTelluricTarget); // // Code below kept for compatibility with files generated before 20090727 // } else if(tag=="ModalCurve" ) { XMLRestoreAttributeIterator it=attributes.find(attName); if(it!=attributes.end()) { if(it.value()=="disp") { _dispersionTarget.curves().append(ModalCurve()); return XMLMember(&_dispersionTarget.curves().last()); } else if(it.value()=="ellCurve") { _ellipticityCurveTarget.curves().append(ModalCurve()); return XMLMember(&_ellipticityCurveTarget.curves().last()); } else { App::stream() << tr("Wrong type of modal curve %1").arg(it.value().toString()) << endl; return XMLMember(XMLMember::Unknown); } } else { App::stream() << tr("No type defined for modal curve") << endl; return XMLMember(XMLMember::Unknown); } } else if(tag=="AutocorrCurves") { return XMLMember(&_autocorrTarget.curves()); } else if(tag=="StatValue" ) { return XMLMember(&_ellipticityPeakTarget.value()); } else if(tag=="RefractionCurve") { XMLRestoreAttributeIterator it=attributes.find(attName); if(it!=attributes.end()) { if(it.value()=="refraVp") { _refractionVpTarget.curves().append(RefractionCurve()); return XMLMember(&_refractionVpTarget.curves().last()); } else if(it.value()=="refraVs") { _refractionVsTarget.curves().append(RefractionCurve()); return XMLMember(&_refractionVsTarget.curves().last()); } else { App::stream() << tr("Wrong type of refraction curve %1").arg(it.value().toString()) << endl; return XMLMember(XMLMember::Unknown); } } else { App::stream() << tr("No type defined for refraction curve") << endl; return XMLMember(XMLMember::Unknown); } } else if(tag=="position" ) return XMLMember(19); else if(tag=="dispWeight" ) return XMLMember(1); // kept for compatibility else if(tag=="dispMinMisfit" ) return XMLMember(7); // kept for compatibility else if(tag=="dispMisfitType" ) return XMLMember(13); // kept for compatibility else if(tag=="autocorrWeight" ) return XMLMember(2); // kept for compatibility else if(tag=="autocorrMinMisfit" ) return XMLMember(8); // kept for compatibility else if(tag=="autocorrMisfitType" ) return XMLMember(14); // kept for compatibility else if(tag=="ellCurveWeight" ) return XMLMember(3); // kept for compatibility else if(tag=="ellCurveMinMisfit" ) return XMLMember(9); // kept for compatibility else if(tag=="ellCurveMisfitType" ) return XMLMember(15); // kept for compatibility else if(tag=="ellPeakWeight" ) return XMLMember(4); // kept for compatibility else if(tag=="ellPeakMinMisfit" ) return XMLMember(10); // kept for compatibility else if(tag=="ellPeakMisfitType" ) return XMLMember(16); // kept for compatibility else if(tag=="refraVpWeight" ) return XMLMember(5); // kept for compatibility else if(tag=="refraVpMinMisfit" ) return XMLMember(11); // kept for compatibility else if(tag=="refraVpMisfitType" ) return XMLMember(17); // kept for compatibility else if(tag=="refraVsWeight" ) return XMLMember(6); // kept for compatibility else if(tag=="refraVsMinMisfit" ) return XMLMember(12); // kept for compatibility else if(tag=="refraVsMisfitType" ) return XMLMember(18); // kept for compatibility else if(tag=="ellWeight" ) return XMLMember(0); // kept for compatibility else if(tag=="modeGuess" ) return XMLMember(0); // kept for compatibility else if(tag=="modeGuessFreeJumping" ) return XMLMember(0); // kept for compatibility else if(tag=="modeGuessCount" ) return XMLMember(0); // kept for compatibility else if(tag=="modeGuessRayleighCount" ) return XMLMember(0); // kept for compatibility else if(tag=="hodoVpWeight" ) return XMLMember(0); // kept for compatibility else if(tag=="hodoVpMinMisfit" ) return XMLMember(0); // kept for compatibility else if(tag=="hodoVsWeight" ) return XMLMember(0); // kept for compatibility else if(tag=="hodoVsMinMisfit" ) return XMLMember(0); // kept for compatibility else if(tag=="ModalDispersion" ) { // kept for compatibility CompatModalDispersion * disp=new CompatModalDispersion; return XMLMember(disp, true); } else return XMLMember(XMLMember::Unknown); }
void DinverDCCore::TargetList::xml_polish | ( | XML_POLISH_ARGS | ) | [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreTools::L2_LogNormalized, DinverDCCore::Target::setMisfitType(), TRACE, and validateTargets().
{ TRACE; Q_UNUSED(context); // Ellipticity values are expressed on a log scale _ellipticityCurveTarget.setMisfitType(L2_LogNormalized); validateTargets(); }
void DinverDCCore::TargetList::xml_polishChild | ( | XML_POLISHCHILD_ARGS | ) | [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreWave::ModalCurve::addMode(), QGpCoreTools::Curve< pointType >::append(), DinverDCCore::ModalCurveTarget::curves(), QGpCompatibility::CompatModalRefinedCurves::mode(), QGpCompatibility::CompatModalRefinedCurves::nModes(), QGpCompatibility::CompatModalFrequency::nRayleighModes(), QGpCompatibility::CompatModalFrequency::omega(), QGpCoreTools::StatisticalValue< numberType >::setMean(), QGpCoreTools::StatisticalValue< numberType >::setStddev(), QGpCoreTools::StatisticalValue< numberType >::setWeight(), QGpCoreTools::StatisticalPoint< numberType >::setX(), and TRACE.
{ TRACE; Q_UNUSED(context); // Function kept for compatibility only if(child->xml_tagName()=="ModalDispersion") { CompatModalDispersion * disp=static_cast<CompatModalDispersion *>(child); for(int i=0;i<disp->nModes();i++) { _dispersionTarget.curves().append(ModalCurve()); ModalCurve * c=&_dispersionTarget.curves().last(); if(i<disp->nRayleighModes()) { c->addMode(Mode( Mode::Phase, Mode::Rayleigh, i) ); } else { c->addMode(Mode( Mode::Phase, Mode::Love, i-disp->nRayleighModes()) ); } CompatVDataPointVector& m=disp->mode(i); for(int i=0;i<m.size();i++) { FactoryPoint p; p.setX(0.5/M_PI * disp->omega(i)); p.setMean(m.at(i).mean()); p.setStddev(m.at(i).stddev()); p.setWeight(m.at(i).weight()); c->append(p); } } } }
bool DinverDCCore::TargetList::xml_setProperty | ( | XML_SETPROPERTY_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore properties support to your class.
From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).
For a general case:
Q_UNUSED(attributes); double val=content.toDouble(); switch (memberID) { case 0: _x1=val; return true; case 1: _y1=val; return true; case 2: _x2=val; return true; case 3: _y2=val; return true; default: return false; }
For classes inheriting other classes (see also xml_member())
switch (memberID) { case 0: _anInteger=content.toString(); return true; case 1: _aString=content.toInt(); return true; case 2: _aDouble=content.toDouble(); return true; default: return AbstractLine::xml_setProperty(memberID-3, map, content);
For the arguments of this function use Macro XML_SETPROPERTY_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreTools::Point::fromString(), DinverDCCore::Target::setMinimumMisfit(), DinverDCCore::Target::setMisfitType(), DinverDCCore::Target::setMisfitWeight(), and TRACE.
{ TRACE; Q_UNUSED(tag) Q_UNUSED(attributes) Q_UNUSED(context); switch (memberID) { case 19: _position.fromString(content.toString()); return true; case 0: return true; // kept for compatibility only case 1: _dispersionTarget.setMisfitWeight(content.toDouble()); return true; // kept for compatibility only case 2: _autocorrTarget.setMisfitWeight(content.toDouble()); return true; // kept for compatibility only case 3: _ellipticityCurveTarget.setMisfitWeight(content.toDouble()); return true; // kept for compatibility only case 4: _ellipticityPeakTarget.setMisfitWeight(content.toDouble()); return true; // kept for compatibility only case 5: _refractionVpTarget.setMisfitWeight(content.toDouble()); return true; // kept for compatibility only case 6: _refractionVsTarget.setMisfitWeight(content.toDouble()); return true; // kept for compatibility only case 7: _dispersionTarget.setMinimumMisfit(content.toDouble()); return true; // kept for compatibility only case 8: _autocorrTarget.setMinimumMisfit(content.toDouble()); return true; // kept for compatibility only case 9: _ellipticityCurveTarget.setMinimumMisfit(content.toDouble()); return true; // kept for compatibility only case 10: _ellipticityPeakTarget.setMinimumMisfit(content.toDouble()); return true; // kept for compatibility only case 11: _refractionVpTarget.setMinimumMisfit(content.toDouble()); return true; // kept for compatibility only case 12: _refractionVsTarget.setMinimumMisfit(content.toDouble()); return true; // kept for compatibility only case 13: _dispersionTarget.setMisfitType(RealStatisticalValue::misfitType(content.toString())); return true; // kept for compatibility only case 14: _autocorrTarget.setMisfitType(RealStatisticalValue::misfitType(content.toString())); return true; // kept for compatibility only case 15: _ellipticityCurveTarget.setMisfitType(RealStatisticalValue::misfitType(content.toString())); return true; // kept for compatibility only case 16: _ellipticityPeakTarget.setMisfitType(RealStatisticalValue::misfitType(content.toString())); return true; // kept for compatibility only case 17: _refractionVpTarget.setMisfitType(RealStatisticalValue::misfitType(content.toString())); return true; // kept for compatibility only case 18: _refractionVsTarget.setMisfitType(RealStatisticalValue::misfitType(content.toString())); return true; // kept for compatibility only default: return false; } }
virtual const QString& DinverDCCore::TargetList::xml_tagName | ( | ) | const [inline, virtual] |
Implements QGpCoreTools::XMLClass.
{return xmlTargetListTag;}
void DinverDCCore::TargetList::xml_writeChildren | ( | XML_WRITECHILDREN_ARGS | ) | const [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References QGpCoreTools::XMLSaveAttributes::add(), TRACE, and QGpCoreTools::XMLClass::xml_save().
{ TRACE; static const QString key("type"); XMLSaveAttributes att; QString& value=att.add(key); value="dispersion"; _dispersionTarget.xml_save(s, context, att); _autocorrTarget.xml_save(s, context); value="ellipticity"; _ellipticityCurveTarget.xml_save(s, context, att); value="ellipticity peak"; _ellipticityPeakTarget.xml_save(s, context, att); value="Vp"; _refractionVpTarget.xml_save(s, context, att); value="Vs"; _refractionVsTarget.xml_save(s, context, att); _magnetoTelluricTarget.xml_save(s, context); }
void DinverDCCore::TargetList::xml_writeProperties | ( | XML_WRITECHILDREN_ARGS | ) | const [protected, virtual] |
References QGpCoreTools::Point::toString(), TRACE, and QGpCoreTools::XMLClass::writeProperty().
{ TRACE; Q_UNUSED(context); writeProperty(s, "position", _position.toString(20)); }
friend class DCReportBlock [friend] |
const QString DinverDCCore::TargetList::xmlTargetListTag = "TargetList" [static] |