对于我正在进行的项目,我需要计算给定表面亮度分布的导数,该分布与像素响应函数(以及PSF等)进行卷积。
由于各种原因,但主要是为了保持一致性,我希望使用GALSIM代码的内容来做到这一点。但是,因为在这种情况下,`flux'定义为非参数模型的总和不再具有图像本身的物理意义(在这种情况下它将始终被视为无噪声),在某些情况下我希望能够定义没有通量归一化的插值图像。
代码似乎并不关心' flux'是负面的,但我遇到了某些情况,即“通量”。机器精度为零,因此断言“dabs(flux-flux_tot)< = dabs(flux_tot)''失败。
我的问题是:可以指定一个非参数模型进行插值而不指定通量归一化值吗?
答案 0 :(得分:0)
目前无法使用galsim.InterpolatedImage()类执行此操作;您可以在GitHub上的GalSim存储库中打开一个问题来发出此功能请求。
有一种方法可以使用GalSim的胆量做到这一点;如果您愿意深入了解源代码(lensing_ps.py - 只需搜索SBInterpolatedImage以查找相关代码位),就会在透镜功率谱功能中说明一个示例。基本思想是使用相关的C ++类galsim._galsim.SBInterpolatedImage(),而不是使用galsim.InterpolatedImage(),它可以在python中访问。 SBInterpolatedImage可以使用图像和实数和傅里叶空间中插值的选择进行初始化,如lensing_ps.py中的示例所示,然后使用xValue()方法查询以获取插值到某个位置的值。
这个技巧在lensing_ps.py中是必要的,因为我们插入的剪切场往往平均为零,所以我们遇到了你所遇到的同样问题。对于GalSim用户,我们通常不建议使用SBInterpolatedImage类(我们建议仅使用python类),但它现在肯定是解决问题的方法。