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] |