26 #ifndef GRALE_GRIDLENSINVERSIONGAFACTORYNEW_H
28 #define GRALE_GRIDLENSINVERSIONGAFACTORYNEW_H
30 #include "graleconfig.h"
31 #include "randomnumbergenerator.h"
35 #include <mogal/gafactory.h>
41 class GridLensInversionGAFactoryParamsNew;
42 class GridLensInversionGenomeNew;
43 class ImagesDataExtended;
44 class GravitationalLens;
45 class LensFitnessObject;
48 class GRALE_IMPORTEXPORT GridLensInversionGAFactoryNew :
public virtual mogal::GAFactory
51 GridLensInversionGAFactoryNew();
52 ~GridLensInversionGAFactoryNew();
54 mogal::GAFactoryParams *createParamsInstance()
const;
55 const mogal::GAFactoryParams *getCurrentParameters()
const;
57 bool init(
const mogal::GAFactoryParams *pParams);
59 mogal::Genome *createNewGenome()
const;
61 size_t getMaximalFitnessSize()
const {
return sizeof(float)*(1+getNumberOfFitnessComponents()); }
62 size_t getMaximalGenomeSize()
const {
return (m_numMasses+1)*
sizeof(float); }
64 bool writeGenome(serut::SerializationInterface &si,
const mogal::Genome *pGenome)
const;
65 bool readGenome(serut::SerializationInterface &si, mogal::Genome **pGenome)
const;
66 bool writeGenomeFitness(serut::SerializationInterface &si,
const mogal::Genome *pGenome)
const;
67 bool readGenomeFitness(serut::SerializationInterface &si, mogal::Genome *pGenome)
const;
68 bool writeCommonGenerationInfo(serut::SerializationInterface &si)
const;
69 bool readCommonGenerationInfo(serut::SerializationInterface &si);
71 bool hasFloatingPointFitnessValues()
const {
return true; }
73 const RandomNumberGenerator *getRandomNumberGenerator()
const {
return &m_rndGen; }
75 GravitationalLens *createLens(
const std::vector<float> &masses,
float sheetValue,
float scaleFactor,
double *pTotalMass, std::string &errStr)
const;
77 DeflectionMatrix *getDeflectionMatrix() {
return m_pDeflectionMatrix; }
78 BackProjectMatrixNew *getShortBackProjectMatrix() {
return m_pShortBPMatrix; }
79 BackProjectMatrixNew *getTotalBackProjectMatrix() {
return m_pTotalBPMatrix; }
80 LensFitnessObject *getFitnessObject() {
return m_pFitnessObject; }
82 Vector2D<float> getBottomLeft()
const {
return m_bottomLeftFloat; }
83 Vector2D<float> getTopRight()
const {
return m_topRightFloat; }
84 const std::vector<Vector2D<float> > &getBasisCenters()
const {
return m_basisCenters; }
85 float getMinimalMutationWidth()
const {
return m_minMutationWidth; }
86 float getMaximalMutationWidth()
const {
return m_maxMutationWidth; }
88 float getSheetScale()
const {
return m_sheetScale; }
90 virtual bool useAbsoluteMutation() = 0;
91 virtual float getMutationAmplitude() = 0;
93 int getMaximumNumberOfGenerations()
const {
return m_maxGenerations; }
95 virtual LensFitnessObject *createFitnessObject() = 0;
96 virtual bool subInit(LensFitnessObject *pFitnessObject) = 0;
97 void onSortedPopulation(
const std::vector<mogal::GenomeWrapper> &population);
99 bool localSubInit(
double z_d,
const std::list<ImagesDataExtended *> &images,
100 const std::vector<std::pair<GravitationalLens *, Vector2D<double> > > &basisLenses,
101 const GravitationalLens *pBaseLens,
bool useSheet);
102 double getAngularScale()
const {
return m_pShortBPMatrix->getAngularScale(); }
103 bool createBasisLenses(
double D_d,
const std::list<GridSquare> &squares,
104 const std::vector<double> &massWeights,
double massScale,
105 std::vector<std::pair<GravitationalLens *, Vector2D<double> > > &basisLenses);
106 bool recalculateMassWeights(
const std::vector<std::pair<GravitationalLens *, Vector2D<double> > > &basisLenses,
107 std::vector<double> &massWeights,
const std::list<GridSquare> &squares,
109 void calculateMassRegion(
const std::list<GridSquare> &squares,
double &minSize);
111 RandomNumberGenerator m_rndGen;
112 GridLensInversionGAFactoryParamsNew *m_pCurrentParams;
113 int m_numMasses, m_maxGenerations;
114 bool m_showEvolution, m_saveFirstGenome;
115 bool m_allowNegativeValues;
116 bool m_useGenomeSheet;
119 Vector2D<float> m_bottomLeftFloat;
120 Vector2D<float> m_topRightFloat;
121 Vector2D<double> m_bottomLeft;
122 Vector2D<double> m_topRight;
123 std::vector<Vector2D<float> > m_basisCenters;
124 float m_minMutationWidth;
125 float m_maxMutationWidth;
127 std::vector<std::pair<GravitationalLens *, Vector2D<double> > > m_basisLenses;
129 LensFitnessObject *m_pFitnessObject;
130 DeflectionMatrix *m_pDeflectionMatrix;
131 BackProjectMatrixNew *m_pShortBPMatrix, *m_pTotalBPMatrix;
136 #endif // GRALE_GRIDLENSINVERSIONGAFACTORYNEW_H