cluster_square#
Generates points according to a Neyman-Scott cluster process in a square region.
A Neyman-Scott process is a cluster point process where “parent” points are generated by a Poisson process, and then “daughter” points are scattered around each parent according to a specified distribution.
The generation process:
Parent Point Generation: Generate parent points from a homogeneous Poisson process with intensity[0] in an extended window (larger than [0, limit]² to mitigate edge effects).
Daughter Point Generation: For each parent, generate a Poisson(intensity[1]) number of daughter points:
“Matern”: Daughter points uniformly distributed within a disk of radius = cluster[“param”] centered at the parent. Uses polar coordinates where theta ~ U(0, 2pi) and rho = radius × √U(0,1).
“Thomas”: Daughter points follow an isotropic bivariate Gaussian centered at the parent with standard deviation sigma = cluster[“param”].
Thinning: Retain only daughter points falling within [0, limit]².
Parameters#
intensity (tuple of float): A tuple (intensity_parent, intensity_daughter).
intensity[0]: Intensity of the parent Poisson process.
intensity[1]: Mean number of daughter points per parent.
cluster (dict): Dictionary specifying the clustering mechanism.
“name” (str): Either “Matern” or “Thomas”.
“param” (float): Disk radius for Matern or standard deviation sigma for Thomas.
limit (float): The side length of the square simulation window [0, limit]². Must be positive.
seed (int, optional): A seed for the random number generator. If None, uses entropy from the OS.
Returns#
SetPoints: Instance with points following the cluster process.
Example#
import proximitygraphs as pg
pts = pg.SetPoints.cluster_square(intensity=(12, 12), cluster={"name": "Matern", "param": 0.1}, limit=1, seed=7)
pts.draw(figsize=(8, 8), v_color='#e377c2')