Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef TARGETLIST2D_H
00027 #define TARGETLIST2D_H
00028
00029 #include "TargetList.h"
00030
00031 namespace DinverDCCore {
00032
00033 class Param3DGroundModel;
00034
00035 class DINVERDCCORE_EXPORT TargetList2D : public XMLClass
00036 {
00037 public:
00038 TargetList2D();
00039 TargetList2D(const TargetList2D& o);
00040 ~TargetList2D();
00041
00042 virtual const QString& xml_tagName() const {return xmlTargetList2DTag;}
00043 static const QString xmlTargetList2DTag;
00044
00045 void addTarget(TargetList * t);
00046
00047 int targetCount() const {return _targets.count();}
00048 TargetList * target(int index) const {return _targets.at(index);}
00049
00050 bool setParamProfiles(Param3DGroundModel * gm, RealSpace& ps);
00051 inline bool isPoissonRatioOk(const GroundParameter * from);
00052 double misfit(int nDimensions, bool& ok);
00053 void writeReport(ReportWriter * report) const;
00054 void humanInfo() const;
00055 protected:
00056 virtual void xml_writeChildren(XML_WRITECHILDREN_ARGS) const;
00057 virtual XMLMember xml_member(XML_MEMBER_ARGS);
00058 private:
00059 friend class DCReportBlock;
00060
00061 void interpole(const Point& at, const Profile& p1, const Profile& p2, const Profile& p3, Profile& p);
00062
00063 ParamProfile * _vp[3];
00064 ParamProfile * _nu[3];
00065 ParamProfile * _vs[3];
00066 ParamProfile * _rho[3];
00067 PoissonCondition * _poissonCondition[3];
00068 QHash<const ParamGroundModel *, int> _models;
00069
00070 QVector<TargetList *> _targets;
00071
00072 Plane _planeEngine;
00073 Profile _reportVp, _reportVs, _reportRho;
00074 };
00075
00076 inline bool TargetList2D::isPoissonRatioOk(const GroundParameter * from)
00077 {
00078 TRACE;
00079 QHash<const ParamGroundModel *, int>::iterator it=_models.find(from->groundModel());
00080 ASSERT(it!=_models.end());
00081 PoissonCondition * pc=_poissonCondition[it.value()];
00082 if(pc) {
00083 return pc->isOk(from);
00084 } else {
00085 return true;
00086 }
00087 }
00088
00089 }
00090
00091 #endif // TARGETLIST2D_H