def iotaDistanceGrid( iota, distance, Niota, Ndistance, minDistance=1, maxDistance=1000, padding=2., **kwargs ):
'''
returns a grid over iota and distance
return iotaGRID, distanceGRID
'''
cosIotaGRID = np.outer(np.linspace(-1, 1, Niota), np.ones(Ndistance)) ### spacing of inclinations
### maximum allowed "scaling constant" for placing distance grid
### take into account the detectability (malmquist prior -> gets rid of a lot of otherwise very densely sampled parameter-space
cosIota2 = np.cos(iota)**2
dM3 = ( (padding*distance)**2 / (0.25*(1+cosIota2)**2+cosIota2) )**(3./2)
### minimum allowed "scaling constant" for distance grid
dm3 = (minDistance/2**0.5)**3
do = np.outer(np.ones(Niota), np.linspace(dm3, dM3, Ndistance)**(1./3)) ### constants for scaling relation
cosIota2GRID = cosIotaGRID**2
distanceGRID = do*(0.25*(1+cosIota2GRID)**2 + cosIota2GRID)**0.5
distanceGRID = distanceGRID.flatten()
truth = (distanceGRID>=minDistance)*(distanceGRID<=maxDistance) ### exclude points outside of prior bounds
return np.arccos(cosIotaGRID).flatten()[truth], distanceGRID[truth]
评论列表
文章目录