26 #ifndef GRALE_IMAGESBACKPROJECTOR_H
28 #define GRALE_IMAGESBACKPROJECTOR_H
34 #include "graleconfig.h"
37 #include <errut/errorbase.h>
45 class ImagesDataExtended;
46 class GravitationalLens;
47 class LensFitnessObject;
65 double getAngularScale()
const {
return m_angularScale; }
66 const Vector2D<float> *getBetas(
int sourceNumber)
const { checkBetas(sourceNumber);
return &(m_betas[sourceNumber][0]); }
67 const Vector2D<float> *getBetas(
int sourceNumber,
int imageNumber)
const { checkBetas(sourceNumber);
return &(m_betas[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
68 const Vector2D<float> *getThetas(
int sourceNumber)
const {
return &(m_thetas[sourceNumber][0]); }
69 const Vector2D<float> *getThetas(
int sourceNumber,
int imageNumber)
const {
return &(m_thetas[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
70 const float *getDerivativesXX(
int sourceNumber)
const { checkDerivatives(sourceNumber);
return &(m_axx[sourceNumber][0]); }
71 const float *getDerivativesXX(
int sourceNumber,
int imageNumber)
const { checkDerivatives(sourceNumber);
return &(m_axx[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
72 const float *getDerivativesYY(
int sourceNumber)
const { checkDerivatives(sourceNumber);
return &(m_ayy[sourceNumber][0]); }
73 const float *getDerivativesYY(
int sourceNumber,
int imageNumber)
const { checkDerivatives(sourceNumber);
return &(m_ayy[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
74 const float *getDerivativesXY(
int sourceNumber)
const { checkDerivatives(sourceNumber);
return &(m_axy[sourceNumber][0]); }
75 const float *getDerivativesXY(
int sourceNumber,
int imageNumber)
const { checkDerivatives(sourceNumber);
return &(m_axy[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
76 const float *getInverseMagnifications(
int sourceNumber)
const { checkInvMag(sourceNumber);
return &(m_invMag[sourceNumber][0]); }
77 const float *getInverseMagnifications(
int sourceNumber,
int imageNumber)
const { checkInvMag(sourceNumber);
return &(m_invMag[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
78 const float *getShearComponents1(
int sourceNumber)
const { checkShear(sourceNumber);
return &(m_shearComponents1[sourceNumber][0]); }
79 const float *getShearComponents1(
int sourceNumber,
int imageNumber)
const { checkShear(sourceNumber);
return &(m_shearComponents1[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
80 const float *getShearComponents2(
int sourceNumber)
const { checkDerivatives(sourceNumber);
return &(m_axy[sourceNumber][0]); }
81 const float *getShearComponents2(
int sourceNumber,
int imageNumber)
const { checkDerivatives(sourceNumber);
return &(m_axy[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
82 const float *getConvergence(
int sourceNumber)
const { checkConvergence(sourceNumber);
return &(m_convergence[sourceNumber][0]); }
83 const float *getConvergence(
int sourceNumber,
int imageNumber)
const { checkConvergence(sourceNumber);
return &(m_convergence[sourceNumber][m_offsets[sourceNumber][imageNumber]]); }
84 float getTimeDelay(
int sourceNumber,
int imageNumber,
int pointNumber,
Vector2D<float> beta)
const;
86 bool write(
const std::string &fname,
double angularunit,
bool magnifyFlux)
const;
88 void checkBetas(
int sourceNumber)
const;
89 void checkDerivatives(
int sourceNumber)
const;
90 void checkInvMag(
int sourceNumber)
const;
91 void checkShear(
int sourceNumber)
const;
92 void checkConvergence(
int sourceNumber)
const;
94 mutable std::vector<std::vector<Vector2D<float> > > m_betas;
95 std::vector<std::vector<Vector2D<float> > > m_thetas;
96 std::vector<std::vector<Vector2D<double> > > m_originalThetas;
97 mutable std::vector<std::vector<float> > m_axx, m_ayy, m_axy;
98 mutable std::vector<std::vector<float> > m_invMag;
99 mutable std::vector<std::vector<float> > m_shearComponents1;
100 mutable std::vector<std::vector<float> > m_convergence;
101 double m_angularScale;
110 #endif // GRALE_IMAGESBACKPROJECTOR_H