对于我正在进行的项目,我将需要计算给定的表面亮度轮廓的导数,该导数与像素响应函数(以及PSF等)相转换。
出于各种原因,但主要是为了一致性,我希望使用GALSIM代码的核心来实现这一点。然而,由于在这种情况下,定义为非参数模型之和的“通量”在图像本身方面不再具有物理意义(在这种情况下,它总是被认为是无噪音的),在某些情况下,我希望能够在不进行通量归一化的情况下定义插值图像。
代码似乎并不关心“通量”是否为负值,但我遇到了某些情况,即“通量”在机器精度为零的范围内,因此断言dabs(通量-通量_tot) <= dabs(Flux_tot)‘失败。
因此,我的问题是:在不指定通量正常化值的情况下,可以指定一个非参数模型进行插值吗?
发布于 2015-06-18 16:47:30
目前无法使用galsim.InterpolatedImage()类进行此操作;您可以在GalSim存储库中打开一个问题,在GitHub上发出此特性请求。
有一种方法可以使用GalSim的内核来实现这一点;如果您愿意挖掘源代码(lensing_ps.py --只需搜索SBInterpolatedImage以找到相关的代码位),则在透镜功率谱功能中说明了一个例子。基本思想是,您不用使用galsim.InterpolatedImage(),而是使用相关的C++类galsim._galsim.SBInterpolatedImage(),它在python中是可访问的。可以在实空间和傅里叶空间中使用图像和插值选择来初始化SBInterpolatedImage,如lensing_ps.py中的示例所示,然后使用xValue()方法进行查询,得到插值到某个位置的值。
这个技巧在lensing_ps.py中是必要的,因为我们在插值剪切场,它的平均值是零,所以我们遇到了同样的问题。SBInterpolatedImage类的使用通常不推荐给GalSim用户(我们建议只使用python类),但目前它肯定是解决问题的一种方法。
https://stackoverflow.com/questions/30898716
复制相似问题