26 #ifndef GRALE_TREELENSINVERSIONGENOMEBASE_H
28 #define GRALE_TREELENSINVERSIONGENOMEBASE_H
30 #include "graleconfig.h"
31 #include "lensinversiongenomebase.h"
36 #define TREELENSINVERSIONGENOMEBASE_MAXFITNESSCOMP 16
41 class BackProjectTreeBase;
42 class TreeLensInversionGAFactoryBase;
43 class GravitationalLens;
46 class MultiplePlummerLensParams;
48 class GRALE_IMPORTEXPORT TreeLensInversionGenomeBase :
public LensInversionGenomeBase
51 TreeLensInversionGenomeBase(TreeLensInversionGAFactoryBase *pFactory, BackProjectTreeBase *m,
int firstLevelSubdiv);
52 TreeLensInversionGenomeBase(TreeLensInversionGAFactoryBase *pFactory, BackProjectTreeBase *m, GridNodeBase *pRootNode);
54 ~TreeLensInversionGenomeBase();
56 void setActiveFitnessComponent(
int i) { m_activeFitnessComponent = i; }
57 bool calculateFitness();
58 bool isFitterThan(
const mogal::Genome *g)
const {
const TreeLensInversionGenomeBase *g2 = (
const TreeLensInversionGenomeBase *)g;
if (m_fitnessValues[m_activeFitnessComponent] < g2->getFitnessValues()[m_activeFitnessComponent])
return true;
return false; }
59 mogal::Genome *reproduce(
const mogal::Genome *g)
const;
60 mogal::Genome *clone()
const;
62 std::string getFitnessDescription()
const;
64 const float *getFitnessValues()
const {
return m_fitnessValues; }
65 float getScaleFactor()
const {
return m_scaleFactor; }
66 void setFitnessValues(
const float *pValues) {
for (
int i = 0 ; i < TREELENSINVERSIONGENOMEBASE_MAXFITNESSCOMP ; i++) m_fitnessValues[i] = pValues[i]; }
67 void setScaleFactor(
float s) { m_scaleFactor = s; }
69 const GridNodeBase *getRootNode()
const {
return m_pRootNode; }
71 GravitationalLens *createLens(
double *totalmass, std::string &errstr)
const;
73 virtual TreeLensInversionGenomeBase *allocateNewInstance(TreeLensInversionGAFactoryBase *f, BackProjectTreeBase *m, GridNodeBase *pRootNode)
const = 0;
74 virtual void initializeNewCalculation() = 0;
75 virtual float calculateMassScaleFitness(
float scalefactor) = 0;
76 virtual void calculateTotalFitness(
float scalefactor,
float *fitnessvalues) = 0;
77 virtual void getCalculationParameters(
float &startfactor,
float &stopfactor,
int &numiterationsteps,
int &numiterations)
const
81 numiterationsteps = 20;
85 TreeLensInversionGAFactoryBase *getFactory()
const {
return m_pFactory; }
86 BackProjectTreeBase *getBackProjectTree() {
return m_pBackProjectTree; }
89 void addBasisFunction(
const GridNodeBase *pNode,
int level, MultiplePlummerLensParams *pLensParams, Vector2D<double> center,
double areaSize,
double widthScaleFactor,
double massScale)
const;
90 static float findMaxWeight(
const GridNodeBase *pNode);
91 static float sumWeights(
const GridNodeBase *pNode,
int level,
bool useWeights);
92 static void scaleWeights(GridNodeBase *pNode,
float scaleFactor);
93 GridNodeBase *reproduce(
const GridNodeBase *pNode1,
const GridNodeBase *pNode2,
float scaleFactor1,
float scaleFactor2)
const;
94 void findAllWeightNodes(GridNodeBase *pNode, std::vector<GridNodeBase *> &allNodes);
95 static int countAllWeightNodes(GridNodeBase *pNode, std::vector<GridTreeNode *> &parentNodes);
96 GridNodeBase *prune(GridNodeBase *pNode,
int maxBasisFunctions)
const;
97 static void scaleAllWeightNodes(GridNodeBase *pNode,
float factor);
99 int m_activeFitnessComponent;
100 float m_fitnessValues[TREELENSINVERSIONGENOMEBASE_MAXFITNESSCOMP];
102 GridNodeBase *m_pRootNode;
105 TreeLensInversionGAFactoryBase *m_pFactory;
106 BackProjectTreeBase *m_pBackProjectTree;
111 #endif // GRALE_TREELENSINVERSIONGENOMEBASE_H