26 #ifndef GRALE_GRIDLENSINVERSIONGAFACTORYBASE_H
28 #define GRALE_GRIDLENSINVERSIONGAFACTORYBASE_H
30 #include "graleconfig.h"
31 #include "randomnumbergenerator.h"
34 #include <mogal/gafactorydefaults.h>
40 class GridLensInversionGAFactoryParams;
41 class GridLensInversionGenomeBase;
42 class ImagesDataExtended;
43 class GravitationalLens;
44 class LensFitnessObject;
47 class GRALE_IMPORTEXPORT GridLensInversionGAFactoryBase :
public virtual mogal::GAFactory
50 GridLensInversionGAFactoryBase();
51 ~GridLensInversionGAFactoryBase();
53 mogal::GAFactoryParams *createParamsInstance()
const;
54 const mogal::GAFactoryParams *getCurrentParameters()
const;
56 bool init(
const mogal::GAFactoryParams *p);
58 mogal::Genome *createNewGenome()
const;
60 size_t getMaximalFitnessSize()
const {
return sizeof(float)*(2+getNumberOfFitnessComponents()); }
62 size_t getMaximalGenomeSize()
const {
return (m_numMasses+1+m_numAutoDistFrac)*
sizeof(float); }
64 size_t getMaximalGenomeSize()
const {
return (m_numMasses+1)*
sizeof(float); }
65 #endif // AUTODISTFRAC
67 bool writeGenome(serut::SerializationInterface &si,
const mogal::Genome *g)
const;
68 bool readGenome(serut::SerializationInterface &si, mogal::Genome **g)
const;
69 bool writeGenomeFitness(serut::SerializationInterface &si,
const mogal::Genome *g)
const;
70 bool readGenomeFitness(serut::SerializationInterface &si, mogal::Genome *g)
const;
71 bool writeCommonGenerationInfo(serut::SerializationInterface &si)
const;
72 bool readCommonGenerationInfo(serut::SerializationInterface &si);
74 bool hasFloatingPointFitnessValues()
const {
return true; }
76 const mogal::RandomNumberGenerator *getRandomNumberGenerator()
const {
return &m_rndGen; }
77 const std::vector<Vector2D<float> > &getPlummerPositions()
const {
return m_plummerPositions; }
78 const std::vector<float> &getSquareSizes()
const {
return m_squareSizes; }
79 float getGridSize()
const {
return m_gridSize; }
80 Vector2D<float> getGridCenter()
const {
return m_gridCenter; }
81 bool allowNegativeValues()
const {
return m_allowNegativeValues; }
82 const float *getMassWeights()
const {
return &(m_massWeights[0]); }
83 float getSheetScale()
const {
return m_sheetScale; }
84 bool useLoopSheet()
const {
return m_useLoopSheet; }
86 virtual float getChanceMultiplier() = 0;
87 virtual bool useAbsoluteMutation() = 0;
88 virtual float getMutationAmplitude() = 0;
90 GravitationalLens *createLens(
const std::vector<float> &masses,
float sheetValue,
float scaleFactor,
double *pTotalMass, std::string &errStr)
const;
92 DeflectionMatrix *getDeflectionMatrix() {
return m_pDeflectionMatrix; }
93 BackProjectMatrixNew *getShortBackProjectMatrix() {
return m_pShortBPMatrix; }
94 BackProjectMatrixNew *getTotalBackProjectMatrix() {
return m_pTotalBPMatrix; }
95 LensFitnessObject *getFitnessObject() {
return m_pFitnessObject; }
97 const std::vector<float> &getDistanceFractions()
const {
return m_distanceFractions; }
98 int getImagesGroupSize()
const {
return m_imagesGroupSize; }
99 int getNumberOfAutoDistanceFractions()
const {
return m_numAutoDistFrac; }
100 #endif // AUTODISTFRAC
102 int getMaximumNumberOfGenerations()
const {
return m_maxGenerations; }
104 virtual LensFitnessObject *createFitnessObject() = 0;
107 virtual bool subInit(LensFitnessObject *pFitnessObject) = 0;
109 void onSortedPopulation(
const std::vector<mogal::GenomeWrapper> &population);
110 #endif // SHOWEVOLUTION
112 bool localSubInit(
double z_d,
const std::list<ImagesDataExtended *> &images,
113 const std::vector<std::pair<GravitationalLens *, Vector2D<double> > > &basisLenses,
114 const GravitationalLens *pBaseLens,
bool useSheet);
115 double getAngularScale()
const {
return m_pShortBPMatrix->getAngularScale(); }
117 RandomNumberGenerator m_rndGen;
118 GridLensInversionGAFactoryParams *m_pCurrentParams;
119 int m_numMasses, m_maxGenerations;
120 bool m_allowNegativeValues;
121 bool m_useGenomeSheet;
125 std::vector<Vector2D<float> > m_plummerPositions;
126 std::vector<float> m_squareSizes;
127 std::vector<float> m_massWeights;
129 Vector2D<float> m_gridCenter;
131 std::vector<std::pair<GravitationalLens *, Vector2D<double> > > m_basisLenses;
133 LensFitnessObject *m_pFitnessObject;
134 DeflectionMatrix *m_pDeflectionMatrix;
135 BackProjectMatrixNew *m_pShortBPMatrix, *m_pTotalBPMatrix;
138 std::vector<float> m_distanceFractions;
139 int m_imagesGroupSize;
140 int m_numAutoDistFrac;
141 #endif // AUTODISTFRAC
146 #endif // GRALE_GRIDLENSINVERSIONGAFACTORYBASE_H