26 #ifndef GRALE_MULTIPLEWENDLANDLENS_H
28 #define GRALE_MULTIPLEWENDLANDLENS_H
30 #include "graleconfig.h"
37 class GRALE_IMPORTEXPORT WendlandLensInfo
40 WendlandLensInfo() { m_heightFactor = 0; m_angularScale = 1; }
41 WendlandLensInfo(
double heightFactor,
double angularScale,
42 Vector2D<double> angularPosition) { m_heightFactor = heightFactor; m_angularScale = angularScale; m_angularPosition = angularPosition; }
44 double getHeightFactor()
const {
return m_heightFactor; }
45 double getAngularScale()
const {
return m_angularScale; }
46 Vector2D<double> getAngularPosition()
const {
return m_angularPosition; }
48 double m_heightFactor;
49 double m_angularScale;
50 Vector2D<double> m_angularPosition;
53 class GRALE_IMPORTEXPORT MultipleWendlandLensParams :
public GravitationalLensParams
56 MultipleWendlandLensParams() { }
57 MultipleWendlandLensParams(
const std::list<WendlandLensInfo> &phiXInfo,
58 const std::list<WendlandLensInfo> &phiYInfo) { m_phiXInfo = phiXInfo; m_phiYInfo = phiYInfo; }
60 const std::list<WendlandLensInfo> &getPhiXInfo()
const {
return m_phiXInfo; }
61 const std::list<WendlandLensInfo> &getPhiYInfo()
const {
return m_phiYInfo; }
63 void addPhiXInfo(
const WendlandLensInfo &info) { m_phiXInfo.push_back(info); }
64 void addPhiYInfo(
const WendlandLensInfo &info) { m_phiYInfo.push_back(info); }
66 bool matchDeflections(
const std::vector<Vector2D<double> > &deflectionPoints,
67 const std::vector<Vector2D<double> > &deflectionAngles,
70 GravitationalLensParams *createCopy()
const;
71 bool write(serut::SerializationInterface &si)
const;
72 bool read(serut::SerializationInterface &si);
74 std::list<WendlandLensInfo> m_phiXInfo, m_phiYInfo;
77 class GRALE_IMPORTEXPORT MultipleWendlandLens :
public GravitationalLens
80 MultipleWendlandLens();
81 ~MultipleWendlandLens();
83 bool getAlphaVector(Vector2D<double> theta, Vector2D<double> *pAlpha)
const;
84 double getSurfaceMassDensity(Vector2D<double> theta)
const ;
85 bool getProjectedPotential(
double D_s,
double D_ds, Vector2D<double> theta,
double *pPotentialValue)
const;
86 bool getAlphaVectorDerivatives(Vector2D<double> theta,
double &axx,
double &ayy,
double &axy)
const;
88 static double phiX(
double r,
double r2,
double x,
double y);
89 static double phiY(
double r,
double r2,
double x,
double y);
90 static double phiXX(
double r,
double r2,
double x,
double y);
91 static double phiXY(
double r,
double r2,
double x,
double y);
92 static double phiYY(
double r,
double r2,
double x,
double y);
93 static double phiXXX(
double r,
double r2,
double x,
double y);
94 static double phiXXY(
double r,
double r2,
double x,
double y);
95 static double phiXYY(
double r,
double r2,
double x,
double y);
96 static double phiYYY(
double r,
double r2,
double x,
double y);
98 bool processParameters(
const GravitationalLensParams *pLensParams);
100 std::vector<WendlandLensInfo> m_phiXInfo, m_phiYInfo;
105 #endif // GRALE_MULTIPLEWENDLANDLENS_H