grale.inversion
This module contains functions for gravitational lens inversion. The
most straightforward method is to use the class InversionWorkSpace
,
which keeps track of the settings and provides an easier interface to
the other functions. For absolute control however, the individual functions
can still be used.
Defaults
- grale.inversion.getDefaultInverter()
Convenience function in this module, just calls
grale.inverters.getDefaultInverter()
- grale.inversion.setDefaultInverter(x)
Convenience function in this module, just calls
grale.inverters.setDefaultInverter()
InversionWorkSpace
- class grale.inversion.InversionWorkSpace(zLens, regionSize=None, regionCenter=None, multiRegionInfo=None, inverter='default', renderer='default', feedbackObject='default', cosmology='default')
This class tries to make it more straightforward to perform lens inversions by automatically keeping track of the inversion region, the input images and several other settings.
Typically, you’d perform the following steps:
create an instance of the class, specifying the redshift to the lens, the cosmological model and the region for the inversion.
add the images data sets to be used in the inversion using calls to
addImageDataToList()
.create a uniform grid for a first inversion with
setUniformGrid()
and run the inversion with a call toinvert()
.based on the returned lens model, create a grid with smaller cells in regions with more mass using
setSubdivisionGrid()
, and again run the inversion with a call toinvert()
.repeat as needed/desired.
To get more control over the basis functions of which the weights will be optimized, you can also set basis functions directly (see e.g.
addBasisFunctions()
) and optimize their weights usinginvertBasisFunctions()
.- __init__(zLens, regionSize=None, regionCenter=None, multiRegionInfo=None, inverter='default', renderer='default', feedbackObject='default', cosmology='default')
Constructor for this class.
- Arguments:
zLens: the redshift to the gravitational lens for a single lens plane inversion, or a list of redshifts for an (experimental) multi lens plane inversion.
regionSize and regionCenter: the width and height of the region in which the inversion should take plane, as well as its center. This will be used to base the grid dimensions on, but by default some randomness will be added (see e.g.
setUniformGrid()
).These are the default values in
setUniformGrid()
andsetSubdivisionGrid()
but can still be overridden there.In case of a multi-plane inversion, you can specify different sizes for each plane if desired, otherwise the same settings will be used for all planes.
multiRegionInfo: TODO
inverter: specifies the inverter to be used. See the
inverters
renderer: this parameter can be used to specify a specific renderer to speed up the calculation of the mass densities (used for the procedure with the subdivision grid)
feedbackObject: can be used to specify a particular feedback mechanism.
cosmology: an instance of
Cosmology
, describing the cosmological model that should be used throughout these inversions.
- addBasisFunctions(basisFunctions, lpIdx=None)
Add basis functions that will be used in
invertBasisFunctions()
. Each entry in this list should be a dictionary with at least entrieslens
andcenter
containing the lens model and position at which it should be placed. Amass
parameter may be present as well, describing the relevant lensing mass of this basis function. If no such mass is specified, it will be estimated numerically as the mass inside (roughly) the image region.In the final call to the
invert
function, the complete list is then passed as the gridInfoOrBasisFunctions argument. You may look there for some additional information.In a multi-plane setting,
lpIdx
needs to be used to select a particular lens plane.
- addBasisFunctionsBasedOnCurrentGrid(lensModelFunction=<function defaultLensModelFunction>, initialParameters=None, lpIdx=None)
The goal of this function is to add basis functions based on the grid that’s currently stored. The conversion of grid cells to basis functions is done using the function specified in lensModelFunction. The default for this argument is
defaultLensModelFunction
.In general, this function takes three arguments:
operation: the name of the operation
operationInfo: information about the operation
parameters: additional parameters
First lensModelFunction is called with operation set to
"start"
, operationInfo set to a dictionary with entriesworkspace
(this workspace) andgrid
(the current grid), and parameters set to initialParameters. The return value of the function, let’s call this lensModelFunctionParameters, will be used as the parameters for subsequent calls to lensModelFunctionThen, for each grid cell in the current grid, lensModelFunction is called with operation set to
"add"
, operationInfo a dictionary with keyssize
andcenter
containing the length of a cell square side and (x,y) coordinates of the cell center respectively. The previously returned lensModelFunctionParameters is passed as the parameters argument.In this second phase, the lensModelFunction should return a tuple of two things: the lens model for that grid cell, and (optionally) the relevant lensing mass for this basis function. The lens model, the center and optionally this mass is then added to a list, which is eventually processed by the
addBasisFunctions()
procedure.In a multi-plane setting,
lpIdx
needs to be used to select a particular lens plane.
- addImageDataToList(imgDat, zs, imgType, otherParameters={})
Adds the
ImagesData
instance in imgDat to the list of inputs. The corresponding redshift is zs, and imgType describes the type of input, e.g."extendedimages"
. The otherParameters dictionary provides additional settings for this input set. See the usage documentation for other types and parameters.For data with type
"bayesellipticities"
, for the Bayesian weak lensing fitness measure, it is necessary to set zs toNone
. That data itself contains for each individual galaxy the redshift and measured ellipticities, so no global redshift is allowed to be set.
- backProject(lens, typeFilter=['pointimages', 'extendedimages', 'pointgroupimages'])
Takes the information of the images that were added using
addImageDataToList()
, and projects the points back onto the respective source planes using the lens model lens. Note that only the basic, single core procedure is used to back-project the images.The typeFilter can be used to prevent that e.g. the null space grid is back-projected as well. If set to None, then all added
ImagesData
entries will be used. If it is a list of strings, then an entry will only be considered if the the type that was specified is present in this list. The typeFilter can also be a function that’s used to filter the added entries: returnTrue
to include an entry, orFalse
to ignore it. The function will receive two parameters: an index into the list ofImagesData
instances, and a dictionary that contains theImagesData
object as well as distances and parameters.
- calculateFitness(lensOrBackProjectedImages)
For the current grid, the current images data sets, calculate the fitness values for the specified parameter, which can be either a lens, or the already backprojected input images.
When you’ve received the final result after an inversion, calling this function with that lens as its argument should yield the same fitness values to a good approximation. Some differences may exist though, as different code is used in the genetic algorithm.
- clearBasisFunctions(lpIdx='all')
Clears the list of basis functions that will be used in
invertBasisFunctions()
. In a multi-plane settinglpIdx
can be used to only clear the basis funtion for a specific lens plane.
- clearImageDataList()
Clears the list of images data information.
- estimateStrongLensingMass(skipParamCheck=False)
Calls
estimateStrongLensingMass
with the images and lens distance that have been set for this inversion work space.
- getBasisFunctions(lpIdx=None)
Returns the basis functions that have currently been stored, and of which the weights will be optimized when
invertBasisFunctions()
is called. In a multi-plane setting,lpIdx
can be used to obtain the basis functions for a particular lens plane.
- getCosmology()
Returns the cosmological model that was specified during initialization.
- getGrid(lpIdx=None)
Retrieves the currently set grid, e.g. for plotting using
plotSubdivisionGrid
.In a multi-plane setting,
lpIdx
specifies a particular lens plane.
- getImageDataList()
Returns the list that contains the images data sets, and which is built up by successive calls to
addImageDataToList()
.
- getLensDistance(lpIdx=None)
Returns the angular diameter distance to the lens. In case a multi-plane setting is used,
lpIdx
needs to specify a particular lens plane.
- invert(populationSize, **kwargs)
For the current grid, the current images data sets, run the genetic algorithm for the inversion. This calls the
invert
function in this module, which you can consult for other arguments that you can specify using keywords. In addition to the keyword arguments specified there, you can also specify gridSizeFactor, rescaleBasisFunctions and basisFunctionType which will be used to set the sizefactor, rescale and basistype parameters in the initialParameters of theaddBasisFunctionsBasedOnCurrentGrid
call that’s used internally. Note that in this function call the lensModelFunction argument is set todefaultLensModelFunction
.If the same arguments need to be set for each call of this method, you can use
setDefaultInversionArguments()
to set them. Note that the options passed inkwargs
will override the settings stored by that function.This function is now a convenience function, it first calls
clearBasisFunctions
, thenaddBasisFunctionsBasedOnCurrentGrid
, and finallyinvertBasisFunctions
.
- invertBasisFunctions(populationSize, **kwargs)
For the lensing scenario specified in this
InversionWorkSpace
instance, this method calls theinvert
function, but instead of using a grid, a list of basis functions (arbitrary basic lens models) is used of which the weights need to be optimized by the genetic algorithm. function.
- invertParametric(parametricLensDescription, populationSize, **kwargs)
This function uses the images that were added to the workspace to perform a parametric inversion using the
invertParametric()
function. A lens description and population size must be passed, other options to that function can be specified as keyword arguments.
- setBasisFunctions(basisFunctions, lpIdx=None)
Convenience method, just calls
clearBasisFunctions()
followed byaddBasisFunctions()
. In a multi-plane setting,lpIdx
needs to be used to select a particular lens plane.
- setDefaultInversionArguments(**kwargs)
In case you want to pass the same keyword arguments to the
invert
function multiple times, you can specify them using this function and omit them in theinvert
call. The different keyword arguments you can pass are the ones from the coreinvert
function.
- setGrid(grid, lpIdx=None)
Usually, the functions
setUniformGrid()
andsetSubdivisionGrid()
will be used to control the grid (which in turn controls the layout of the basis functions). If this doesn’t suffice, you can provide a specific grid obtained by one of the functions ingrid
yourself using this function.In a multi-plane setting,
lpIdx
specifies the lens plane for which this grid is relevant.
- setRegionSize(regionSize=None, regionCenter=None, multiRegionInfo=None, lpIdx='all')
Set the inversion region, same as in the constructor: regionSize and regionCenter are the width, height and center of the region in which the inversion should take plane. This will be used to base the grid dimensions on, but by default some randomness will be added (see e.g.
setUniformGrid()
).TODO: multiRegionInfo
In a multi-plane scenario,
lpIdx
can be used to specify a particular lens plane for which the region should be set.
- setStrongAndWeakBasisFunctions(strongSubDivInfo, weakSubDiv=None, weakRegionSize=None, weakRegionCenter=None, weakMultiRegionInfo=None, weakRandomFraction='onesquare', weakMassScale=None, ignoreWLMassInMassScaleSearch=False, strongExcludeFunction=None, strongCheckSubDivFunction=None, weakExcludeFunction=None, strongLensModelFunction=<function defaultLensModelFunction>, strongLensModelInitialParams={}, weakLensModelFunction=<function defaultLensModelFunction>, weakLensModelInitialParams={})
This is a convenience function for strong&weak inversions. It sets basis functions based on a strong lensing grid (uniform or subdivision grid) as well as a uniform grid for the weak lensing region. It returns a tuple containing the created grids for strong and weak lensing regions respectively. Use
invertBasisFunctions()
to start the inversion.- Arguments:
strongSubDivInfo: this can either be a number, causing a uniform subdivision grid to be created for the strong lensing region (see
setUniformGrid()
). Alternatively, it can be a tuple (lens, minSubDiv, maxSubDiv) which will be used to create a subdivision grid through a call tosetSubdivisionGrid()
. TODO: Update this for dict style arguments
weakSubDiv: this should be a number that specifies the uniform subdivision parameter for the
setUniformGrid()
call for the weak lensing region. If this is set to zero orNone
, the function will only create the strong lensing part.weakRegionSize: this specifies the size of the grid for the weak lensing area. The strong lensing size is the one that was specified in the constructor.
weakRegionCenter: TODO
weakMultiRegionInfo: TODO
weakRandomFraction: the default will add a random offset to the weak lensing grid that’s based on the grid cell size. A different value will be passed directly to the
setUniformGrid()
function.weakMassScale: while the strong lensing mass scale can be estimated from the observed multiple image sytems, a mass scale needs to be specified for the weak lensing area. The basis functions that are created for the uniform weak lensing grid, will have a total mass that’s equal to this value.
ignoreWLMassInMassScaleSearch: internally, the genetic algorithm will rescale the mass distribution, in some range around the estimated strong lensing mass. When weak lensing mass is included, this search should either be expanded (set massScaleSearchType to
wide
instead ofregular
), or the masses of the basis functions in the weak lensing area should not be counted in this search.strongExcludeFunction: TODO
strongCheckSubDivFunction: TODO
weakExcludeFunction: TODO
strongLensModelFunction: TODO
strongLensModelInitialParams: TODO
weakLensModelFunction: TODO
weakLensModelInitialParams: TODO
- setSubdivisionGrid(lensOrLensInfo, minSquares, maxSquares, startSubDiv=1, randomFraction=0.05, regionSize=None, regionCenter=None, multiRegionInfo=None, lensFilter=None, lensInfoFilter=None, lpIdx=None, excludeFunction=None, checkSubDivFunction=None)
Based on the lens that’s provided as input, create a subdivision grid where regions with more mass are subdivided further, such that the number of resulting grid cells lies between minSquares and maxSquares. For more information about the procedure, see
grid.createSubdivisionGrid
.The usage of the randomFraction parameter is the same as in
setUniformGrid()
.If specified, regionSize and regionCenter override the internally stored dimensions.
In a multi-plane setting, if lensOrLensInfo is a
MultiPlaneContainer
result returned from a previous invert call, the specified subdivision will be applied to each lens plane, using the corresponding inversion result for that lens plane. Alternatively, a single plane lens model orLensInfo
instance can be used for a specific lens plane, but in that caselpIdx
must be set to the correct lens plane index.TODO: multiRegionInfo, checkSubDivFunction, excludeFunction, lensFilter, lensInfoFilter
- setUniformGrid(subDiv, randomFraction=0.05, regionSize=None, regionCenter=None, multiRegionInfo=None, lpIdx='all', excludeFunction=None)
Based on the size and center provided during initialization, create a uniform grid with subDiv subdivisions along each axis, resulting in subDiv`x`subDiv cells.
The randomFraction parameter controls some randomness in the grid positioning: if this is a number, then the center will be offset randomly in X and Y directions by a fraction of the grid size. You can also specify a function instead of a number. In that case, it will receive the region size and center as two arguments, and it should return a tuple containing the width and center of the actual grid to use. This gives you somewhat more freedom in adding randomness to the grid size and center.
If specified, regionSize and regionCenter override the internally stored dimensions.
In a multi-plane scenario,
lpIdx
can be used to specify only one lens plane.TODO: multiRegionInfo
TODO: excludeFunction
Core functions
- grale.inversion.estimateStrongLensingMass(Dd, images, skipParamCheck=False)
For a gravitational lens that’s located at angular diameter distance Dd, estimate the strong lensing mass based on the images data in images. Each entry in the images list should be a dictionary with at least these keys:
images
: theImagesData
instance describing the images of a sourceDs
andDds
: angular diameter distances to this source and from lens to source respectively.
Unless skipParamCheck is
True
, the dictionary should also have aparams
key, for futher parameters of this images data set. Theseparams
should also be a dictionary with at least atype
field; the images data set is skipped unless this type field is eitherextendedimages
,pointimages
orpointgroupimages
. This way, images data sets describing null space information for example, are skipped.If there’s only one image, it will not be used in the mass estimate. Otherwise, the mass estimate for a single images data set will be estimated as the point mass that would be needed to create an Einstein ring with the same diameter as the images’ separaration. The final mass estimate is the average of these separate estimates.
- grale.inversion.getDefaultModuleParameters(moduleName='general')
For the specified module name, query the default parameters.
- grale.inversion.getFullEASettings(eaType='GA', geneticAlgorithmParameters={}, convergenceParameters={})
This function is used to convert defaults for an evolutionary algorithm (EA) stage to full parameters. It is used by the
invert()
andinvertMultiPlane()
functions. The underlying code uses lists of different EA types, parameters for the algorithm, and parameters used to check for convergence. For convenience, certain predefined names can be expanded to such lists as well.Arguments:
eaType: if this is a list, it should contain entries “GA”, “DE”, “JADE” or “RND”. It can also be a string, which in turn will be converted to such a list:
“GA” will be converted to [ “GA”, “GA” ], representing the two stage genetic algorithm approach, where the first one will typically use large mutations and the second one smaller ones.
“DE” is expanded to [ “DE” ], representing a classical diffential evolution optimization.
“JADE” is interpreted as [ “JADE” ], corresponding to the JADE algorithm, a self adapting differential evolution version.
“GA+JADE” is expanded to [ “GA”, “GA”, “JADE” ], the standard two-stage genetic algorithm followed by a JADE step to zoom in on the optimum more closely.
geneticAlgorithmParameters (should really be called just algorithmParameters): if this is a dictionary it will be replaced by a list containing as many copies of the dictionary as there are entries in the eaType list. Then, defaults for each EA are filled in, for settings that are not already present.
convergenceParameters: similar to the previous argument, if this is a dictionary it will first be copied a number of times. Then, defaults for the algorithm will be added.
- grale.inversion.getInversionModuleUsage(moduleName='general')
Returns a usage description that’s provided by the specified genetic algorithm module. The usage information for the
general
module can be viewed here: usage
- grale.inversion.calculateFitness(inputImages, zd, fitnessObjectParameters, lensOrBackProjectedImages, moduleName='general', cosmology=None)
You can pass several parameters in the same way as you would do for a lens inversion, but here you also specify the specific lens for which the relevant fitness measures should be calculated or the pre-calculated back-projected images.
- Arguments:
inputImages: list of input images data instances that should be used in the inversion. See the
invert()
function for more information about the format.zd: the redshift to the lens.
fitnessObjectParameters: parameters to be used when initializing the inversion module that’s specified
lensOrBackProjectedImages: either the gravitational lens model for which the fitness measures should be calculated, or a similar list as inputImages, for which the positions have already been mapped onto the source plane.
moduleName: name of the inversion module for the genetic algorithm.
cosmology: the cosmological model to use.
- grale.inversion.invert(inputImages, basisFunctions, zd, Dd, popSize, moduleName='general', massScale='auto', allowNegativeValues=False, baseLens=None, sheetSearch='nosheet', fitnessObjectParameters=None, massScaleSearchType='regular', convergenceParameters={}, geneticAlgorithmParameters={}, returnNds=False, inverter='default', feedbackObject='default', cosmology=None, maximumGenerations=None, multiPopulationParameters=None, eaType='GA')
Start the genetic algorithm to look for a gravitational lens model that’s compatible with the specified input images. This is a rather low-level function, it may be easier to use an instance of
InversionWorkSpace
instead. This function is for a single lens plane inversion,invertMultiPlane()
is the multi-lens plane counterpart.- Arguments:
inputImages: a list of dictionaries with the following entries:
images
: anImagesData
instance that describes the images of a source, the null space etc.Ds
andDds
: the angular diameter distances to this source.params
: not used for older inversion modules for the genetic algorithm, but for thegeneral
module, this should contain a dictionary with at least atype
field, which can be e.g.pointimages
orextendednullgrid
(see the usage :ref:<usage-module-general> documentation). Other parameters may be set as well, e.g. you could settimedelay
toFalse
to ignore the time delay information in a particular images data instance.
basisFunctions: a list of entries containing basis function info. This parameter should be a list of dictionaries with the following entries:
lens: the lens model for this basis function.
center: the x,y position at which this lens model should be placed.
mass: the mass of this lens model, in the relevant area. Some models have a total mass parameter which would likely work fine, but not all models have this (e.g. a SIS lens or a mass sheet). You should then precalculate the mass in the strong lensing region (approximately) and store it in this entry. This is needed to the algorithm can estimate the total lensing mass of a certain combination of weighted basis functions.
zd: the redshift to the lens, used when calculating time delays (for other purposes the angular diameter distance will be used).
Dd: the angular diameter distance to the lens.
popSize: the size of the population in the genetic algorithm, e.g. 512.
moduleName: name of the inversion module for the genetic algorithm.
massScale: a rough estimate of the total mass of the gravitational lens. Set to
"auto"
or"auto_nocheck"
to let theestimateStrongLensingMass()
function provide this estimate automatically.allowNegativeValues: by default, the weight of the basis functions are only allowed to be positive, to make certain that an overall positive mass density is obtained. In case corrections to a certain mass distribution are being sought, negative weights can be allowed by setting this parameter to
False
.baseLens: in case an approximate solution is already known, it can be set as the lens to start from. In this scenario, the allowNegativeValues parameter is usually set to
True
. Note that when the base lens is specified, only the modifications to it are returned by the inversion routine, and if you want the full lens you need to combine this base lens and the modifications by using aCompositeLens
instance.sheetSearch: by default, only the basis functions for the grid cells are used. You can also allow a mass-sheet basis function, which may be useful as this kind of effect is difficult to model by a grid of basis functions. The traditional way to specify that a mass sheet basis function should be used is to set this to
"genome"
. Alternatively you can specify alens model
to be used in a similar way, allowing you to e.g. use a mass disk. Of course, you can use any lens model here, it doesn’t need to be one resembling a mass sheet. The lens model is very roughly an upper limit in the sense that the search for this weight is initially between 0 and 1 (it is not included in the scaling loop used in the genetic algorithm).fitnessObjectParameters: parameters for the lens inversion module for the generic algorithm. For the
"general"
module, more information can be found in the usage documentation.massScaleSearchType: by default (
"regular"
), a relatively narrow mass range around the provided mass estimate will be explored. To make this search wider (which can be useful if you’re less certain of the total mass, e.g. when including weak lensing measurements over a larger area), you can set this parameter to"wide"
. It can also be set to"nosearch"
to disable the mass scale search completely. Finally, mainly for testing purposes, it can also be set to a dictionary with the following entries:startFactor
stopFactor
numIterations
firstIterationSteps
nextIterationSteps
convergenceParameters: see
getFullEASettings()
.geneticAlgorithmParameters: see
getFullEASettings()
returnNds: by default, this function will return a single gravitational lens model. If there are several fitness measures however, the end result is actually a non-dominated set of models. The inversion module for the genetic algorithm has some default strategy for choosing one solution from this set. In case you’d like to get the complete non-dominated set instead, you can set this flag to
True
.inverter: specifies the inverter to be used. See the
inverters
module for more information.feedbackObject: can be used to specify a particular feedback mechanism.
cosmology: depending on the inversion algorithm, it may be necessary to specify a cosmological model.
maximumGenerations: if the genetic algorithm didn’t stop by itself after this many generations, stop it anyway. To test an inversion script completely, it can be useful to temporarily stop the genetic algorithm after only a small number of generations so that the code doesn’t take long to run (this is now actually merged into the convergenceParameters)
multiPopulationParameters: TODO
eaType: see
getFullEASettings()
.
- grale.inversion.invertMultiPlane(inputImages, basisLensesAndRedshifts, popSize, moduleName='general', massScale='auto', allowNegativeValues=False, baseLenses=[], sheetSearch='nosheet', fitnessObjectParameters=None, massScaleSearchType='regular', convergenceParameters={}, geneticAlgorithmParameters={}, returnNds=False, deviceIndex='rotate', inverter='default', feedbackObject='default', maximumGenerations=None, cosmology=None, multiPopulationParameters=None, eaType='GA')
Perform a multi-plane lens inversion. This is a rather low-level function, it may be easier to use an instance of
InversionWorkSpace
instead.Arguments:
inputImages: a list of dictionaries with the following entries:
images
: anImagesData
instance that describes the images of a source, the null space etc.z
: the redshift of this source.params
: for thegeneral_gpu
module, this could contain a dictionary with at least atype
field, which can be e.g.pointimages
orextendednullgrid
(see the usage documentation).
basisLensesAndRedshifts: A list representing the different lens planes. Each list entry is a dictionary with needs a key z to describe the plane’s redshift, and a key lenses that describes the basis functions in this lens plane. This lenses entry should be a list of dictionaries with the following entries:
lens: the lens model for this basis function.
center: the x,y position at which this lens model should be placed.
mass: the mass of this lens model, in the relevant area. Some models have a total mass parameter which would likely work fine, but not all models have this (e.g. a SIS lens or a mass sheet). You should then precalculate the mass in the strong lensing region (approximately) and store it in this entry. This is needed to the algorithm can estimate the total lensing mass of a certain combination of weighted basis functions.
popSize: the size of the population in the genetic algorithm, e.g. 512.
moduleName: name of the inversion module for the genetic algorithm.
massScale: a rough estimate of the total mass of the gravitational lens. Set to
"auto"
or"auto_nocheck"
to let theestimateStrongLensingMass()
function provide this estimate automatically.allowNegativeValues: by default, the weight of the basis functions are only allowed to be positive, to make certain that an overall positive mass density is obtained. In case corrections to a certain mass distribution are being sought, negative weights can be allowed by setting this parameter to
False
.baseLenses: for each lens plane, a base lens can be specified to which corrections can be applied.
sheetSearch: by default, only the basis functions for the grid cells are used. You can also allow a mass-sheet basis function, which may be useful as this kind of effect is difficult to model by a grid of basis functions. To do so, set this to
"genome"
, in which a mass-sheet component will be added to each lens plane.fitnessObjectParameters: parameters for the lens inversion module for the generic algorithm. For the
"general"
module, more information can be found in the usage documentation.massScaleSearchType: by default (
"regular"
), a relatively narrow mass range around the provided mass estimate will be explored. To make this search wider (which can be useful if you’re less certain of the total mass, e.g. when including weak lensing measurements over a larger area), you can set this parameter to"wide"
. It can also be set to"nosearch"
to disable the mass scale search completely. Finally, mainly for testing purposes, it can also be set to a dictionary with the following entries:startFactor
stopFactor
numIterations
firstIterationSteps
nextIterationSteps
convergenceParameters: see
getFullEASettings()
.geneticAlgorithmParameters: see
getFullEASettings()
.returnNds: by default, this function will return a single gravitational lens model. If there are several fitness measures however, the end result is actually a non-dominated set of models. The inversion module for the genetic algorithm has some default strategy for choosing one solution from this set. In case you’d like to get the complete non-dominated set instead, you can set this flag to
True
.deviceIndex: this multi-plane inversion uses a GPU to back-project the image data, and by setting a specific number, a specific device can be specified. To allow multiple GPUs to be used automatically, you can leave this to
"rotate"
and use aninverter
with as many processes as you have GPUs.inverter: specifies the inverter to be used. See the
inverters
module for more information.feedbackObject: can be used to specify a particular feedback mechanism.
maximumGenerations: if the genetic algorithm didn’t stop by itself after this many generations, stop it anyway. To test an inversion script completely, it can be useful to temporarily stop the genetic algorithm after only a small number of generations so that the code doesn’t take long to run (this is now actually merged into the convergenceParameters)
cosmology: The cosmological model to use, to calculate the necessary angular diameter distances based on the specified redshifts.
multiPopulationParameters: TODO
eaType: see
getFullEASettings()
.
- grale.inversion.invertParametric(inputImages, parametricLensDescription, zd, Dd, popSize, moduleName='general', defaultInitialParameterFraction=0.1, clampToHardLimits=False, fitnessObjectParameters=None, convergenceParameters={}, geneticAlgorithmParameters={}, returnNds=False, inverter='default', feedbackObject='default', cosmology=None, maximumGenerations=None, eaType='JADE', uploadFullParameters=True, deviceIndex='rotate')
This is a low-level function, used by the similarly named function in
InversionWorkSpace
.- Arguments:
inputImages: describes the observed images and their properties, see
invert()
for a full description.parametricLensDescription: a dictionary that describes the lens model and which parameters of the model can vary within which bounds. See the
paramdesc
module for more information.zd: the redshift to the lens, used when calculating time delays (for other purposes the angular diameter distance will be used).
Dd: the angular diameter distance to the lens.
popSize: the size of the population in the genetic algorithm, e.g. 512.
moduleName: name of the inversion module for the evolutionary algorithm.
defaultInitialParameterFraction: this is passed onto the
analyzeParametricLensDescription
function.clampToHardLimits: also passed to the same function.
fitnessObjectParameters: parameters for the lens inversion module for the evolutionary algorithm. For the
"general"
module, more information can be found in the usage documentation.convergenceParameters: see
getFullEASettings()
.geneticAlgorithmParameters: see
getFullEASettings()
returnNds: by default, this function will return a single gravitational lens model. If there are several fitness measures however, the end result is actually a non-dominated set of models. The inversion module for the genetic algorithm has some default strategy for choosing one solution from this set. In case you’d like to get the complete non-dominated set instead, you can set this flag to
True
.inverter: specifies the inverter to be used. See the
inverters
module for more information.feedbackObject: can be used to specify a particular feedback mechanism.
cosmology: depending on the inversion algorithm, it may be necessary to specify a cosmological model.
maximumGenerations: if the genetic algorithm didn’t stop by itself after this many generations, stop it anyway. To test an inversion script completely, it can be useful to temporarily stop the genetic algorithm after only a small number of generations so that the code doesn’t take long to run (this is now actually merged into the convergenceParameters)
eaType: see
getFullEASettings()
.uploadFullParameters: describes the way changes in the parameters are passed on to the GPU. If the model is large, but few parameters are changed, setting this to
False
will onto upload the changed parameters and let GPU code put them in the right locations. WhenTrue
, the entire parameter set (with changes incorporated) is uploaded instead.deviceIndex: this parametric inversion uses a GPU to back-project the image data, and by setting a specific number, a specific device can be specified. To allow multiple GPUs to be used automatically, you can leave this to
"rotate"
and use aninverter
with as many processes as you have GPUs.
- grale.inversion.defaultLensModelFunction(operation, operationInfo, parameters)
This is the default lensModelFunction that’s used in
InversionWorkSpace.addBasisFunctionsBasedOnCurrentGrid
This default function will case the same behaviour as the classic grid based inversion procedure.The initialParameters in that function call will be merged with a dictionary with the following entries:
basistype
: defaults toplummer
, but can also besquare
orgaussian
sizefactor
: a specific value can be set here which converts the grid square size to a width of the basis function. The default value depends on the basis function type: 1.7for plummer
and 1.0 for the two others.rescale
(default isFalse
): by default, the weight of a basis function is a measure of its total mass. This implies that smaller grid cells will correspond to larger densities, i.e. if you set all weights of the basis functions to the same value, the regions with smaller grid cells will have a considerably larger density. Since the usual approach will be to subdivide the regions that contain more mass into smaller grid cells, this does make sense and appears to produce very good results in most cases. To make this effect less pronounced, you can set this parameter toTrue
, and the basis functions will be rescaled. The smaller grid cells will still have higher densities, but not as much as before (in case square basis functions were used, equal weights would generate equal densities irrespective of the grid size).totalmass
: the mass scale for the entire lensing region. In case it’s"auto"
, it will be estimated from the images stored in theInversionWorkSpace
instance.
InversionException
- exception grale.inversion.InversionException
An exception that’s generated if something goes wrong in a function provided by this module.